kruize / autotune

Autonomous Performance Tuning for Kubernetes!
Apache License 2.0
157 stars 53 forks source link

Add validation checks for layer presence label name #149

Open shruacha1234 opened 3 years ago

shruacha1234 commented 3 years ago

Require validation for layer-presence-label-name

Actual behaviour: Throws Null pointer exception for no-value/blank/null layer-presence-label-name

Expected behaviour: Relevant messages which defines the error

multiple-layer-presence-label-name-sections

apiVersion: "recommender.com/v1"
kind: "AutotuneConfig"
metadata:
  name: "multiple-layer-presence-label-name-sections"
layer_name: container
layer_level: 0
details: generic container tunables
layerPresence:
   label:
     - name: 'label'
     - name: 'label'
       value: 'value'
tunables:
  - name: memoryRequest
    value_type: double
    upper_bound: '300M'
    lower_bound: '150M'
    queries:
      datasource:
        - name: 'prometheus'
          query: 'container_memory_working_set_bytes{$CONTAINER_LABEL$="", $POD_LABEL$="$POD$"}'
    sla_class:
      - response_time
      - throughput
      - resource_usage

  - name: cpuRequest
    value_type: double
    upper_bound: '3.0'
    lower_bound: '1.0'
    queries:
      datasource:
        - name: 'prometheus'
          query: '(container_cpu_usage_seconds_total{$CONTAINER_LABEL$!="POD", $POD_LABEL$="$POD$"}[1m])'
    sla_class:
      - response_time
      - throughput
      - resource_usage

no-layer-presence-label-name-value

apiVersion: "recommender.com/v1"
kind: "AutotuneConfig"
metadata:
  name: "no-layer-presence-label-name-value"
layer_name: container
layer_level: 0
details: generic container tunables
layerPresence:
   label:
     - name: 
       value: 'value'
tunables:
  - name: memoryRequest
    value_type: double
    upper_bound: '300M'
    lower_bound: '150M'
    queries:
      datasource:
        - name: 'prometheus'
          query: 'container_memory_working_set_bytes{$CONTAINER_LABEL$="", $POD_LABEL$="$POD$"}'
    sla_class:
      - response_time
      - throughput
      - resource_usage

  - name: cpuRequest
    value_type: double
    upper_bound: '3.0'
    lower_bound: '1.0'
    queries:
      datasource:
        - name: 'prometheus'
          query: '(container_cpu_usage_seconds_total{$CONTAINER_LABEL$!="POD", $POD_LABEL$="$POD$"}[1m])'
    sla_class:
      - response_time
      - throughput
      - resource_usage

null-layer-presence-label-name

apiVersion: "recommender.com/v1"
kind: "AutotuneConfig"
metadata:
  name: "null-layer-presence-label-name"
layer_name: container
layer_level: 0
details: generic container tunables
layerPresence:
   label:
     - name: NULL
       value: 'value'
tunables:
  - name: memoryRequest
    value_type: double
    upper_bound: '300M'
    lower_bound: '150M'
    queries:
      datasource:
        - name: 'prometheus'
          query: 'container_memory_working_set_bytes{$CONTAINER_LABEL$="", $POD_LABEL$="$POD$"}'
    sla_class:
      - response_time
      - throughput
      - resource_usage

  - name: cpuRequest
    value_type: double
    upper_bound: '3.0'
    lower_bound: '1.0'
    queries:
      datasource:
        - name: 'prometheus'
          query: '(container_cpu_usage_seconds_total{$CONTAINER_LABEL$!="POD", $POD_LABEL$="$POD$"}[1m])'
    sla_class:
      - response_time
      - throughput
      - resource_usage

blank-layer-presence-label-name

apiVersion: "recommender.com/v1"
kind: "AutotuneConfig"
metadata:
  name: "blank-layer-presence-label-name"
layer_name: quarkus
layer_level: 2
details: quarkus tunables
layerPresence:
  label:
  - name: ' '
    value: quarkus
tunables:
- name: quarkus.thread-pool.core-threads
  description: 'The core thread pool size. This number of threads will always be kept alive.'
  value_type: integer
  upper_bound: "10"
  lower_bound: "1"
  sla_class:
  - response_time
  - throughput
- name: quarkus.thread-pool.queue-size
  description: 'The queue size'
  value_type: integer
  upper_bound: "100"
  lower_bound: "1"
  sla_class:
  - response_time
  - throughput
  - resource_usage
- name: quarkus.hibernate-orm.jdbc.statement-fetch-size
  description: 'How many rows are fetched at a time by the JDBC driver.'
  value_type: integer
  upper_bound: "50"
  lower_bound: "1"
  sla_class:
  - response_time
  - throughput
  - resource_usage
ShishirH commented 3 years ago

Multiple entries behaviour is as expected

shruacha1234 commented 3 years ago

Autotune logs for no-value, blank and null layer-presence-label-name

null-layer-presence-label-name-autotune.log no-layer-presence-label-name-value-autotune.log blank-layer-presence-label-name-autotune.log