Modified: aurora/site/source/blog/2017-11-01-aurora-0-18-1-released.md URL: http://svn.apache.org/viewvc/aurora/site/source/blog/2017-11-01-aurora-0-18-1-released.md?rev=1814960&r1=1814959&r2=1814960&view=diff ============================================================================== --- aurora/site/source/blog/2017-11-01-aurora-0-18-1-released.md (original) +++ aurora/site/source/blog/2017-11-01-aurora-0-18-1-released.md Sat Nov 11 16:32:40 2017 @@ -11,6 +11,6 @@ tags: Release The latest Apache Aurora release, 0.18.1, is now available for [download](http://aurora.apache.org/downloads/). This is a patch release to update the Shiro library to version 1.2.5. - + Full release notes are available in the release [CHANGELOG](https://git-wip-us.apache.org/repos/asf?p=aurora.git&f=CHANGELOG&hb=rel/0.18.1).
Modified: aurora/site/source/documentation/latest/development/committers-guide.md URL: http://svn.apache.org/viewvc/aurora/site/source/documentation/latest/development/committers-guide.md?rev=1814960&r1=1814959&r2=1814960&view=diff ============================================================================== --- aurora/site/source/documentation/latest/development/committers-guide.md (original) +++ aurora/site/source/documentation/latest/development/committers-guide.md Sat Nov 11 16:32:40 2017 @@ -100,3 +100,6 @@ git pre-receive hook explicitly forbiddi 6. Update the draft email created fom the `release` script in step #5 to include the Apache ID's for all binding votes and send the [RESULT][VOTE] email to the dev@ mailing list. +7. Update the [Aurora Website](http://aurora.apache.org/) by following the +[instructions](https://svn.apache.org/repos/asf/aurora/site/README.md) on the ASF Aurora SVN repo. +Remember to add a blog post under source/blog and regenerate the site before committing. Modified: aurora/site/source/documentation/latest/development/db-migration.md URL: http://svn.apache.org/viewvc/aurora/site/source/documentation/latest/development/db-migration.md?rev=1814960&r1=1814959&r2=1814960&view=diff ============================================================================== --- aurora/site/source/documentation/latest/development/db-migration.md (original) +++ aurora/site/source/documentation/latest/development/db-migration.md Sat Nov 11 16:32:40 2017 @@ -14,7 +14,7 @@ When adding or altering tables or changi [schema.sql](../../src/main/resources/org/apache/aurora/scheduler/storage/db/schema.sql), a new migration class should be created under the org.apache.aurora.scheduler.storage.db.migration package. The class should implement the [MigrationScript](https://github.com/mybatis/migrations/blob/master/src/main/java/org/apache/ibatis/migration/MigrationScript.java) -interface (see [V001_TestMigration](https://github.com/apache/aurora/blob/rel/0.18.1/src/test/java/org/apache/aurora/scheduler/storage/db/testmigration/V001_TestMigration.java) +interface (see [V001_TestMigration](https://github.com/apache/aurora/blob/rel/0.19.0/src/test/java/org/apache/aurora/scheduler/storage/db/testmigration/V001_TestMigration.java) as an example). The upgrade and downgrade scripts are defined in this class. When restoring a snapshot the list of migrations on the classpath is compared to the list of applied changes in the DB. Any changes that have not yet been applied are executed and their downgrade script is stored Modified: aurora/site/source/documentation/latest/development/thrift.md URL: http://svn.apache.org/viewvc/aurora/site/source/documentation/latest/development/thrift.md?rev=1814960&r1=1814959&r2=1814960&view=diff ============================================================================== --- aurora/site/source/documentation/latest/development/thrift.md (original) +++ aurora/site/source/documentation/latest/development/thrift.md Sat Nov 11 16:32:40 2017 @@ -6,7 +6,7 @@ client/server RPC protocol as well as fo correctly handling additions and renames of the existing members, field removals must be done carefully to ensure backwards compatibility and provide predictable deprecation cycle. This document describes general guidelines for making Thrift schema changes to the existing fields in -[api.thrift](https://github.com/apache/aurora/blob/rel/0.18.1/api/src/main/thrift/org/apache/aurora/gen/api.thrift). +[api.thrift](https://github.com/apache/aurora/blob/rel/0.19.0/api/src/main/thrift/org/apache/aurora/gen/api.thrift). It is highly recommended to go through the [Thrift: The Missing Guide](http://diwakergupta.github.io/thrift-missing-guide/) first to refresh on @@ -33,7 +33,7 @@ communicate with scheduler/client from v * Add a new field as an eventual replacement of the old one and implement a dual read/write anywhere the old field is used. If a thrift struct is mapped in the DB store make sure both columns are marked as `NOT NULL` -* Check [storage.thrift](https://github.com/apache/aurora/blob/rel/0.18.1/api/src/main/thrift/org/apache/aurora/gen/storage.thrift) to see if +* Check [storage.thrift](https://github.com/apache/aurora/blob/rel/0.19.0/api/src/main/thrift/org/apache/aurora/gen/storage.thrift) to see if the affected struct is stored in Aurora scheduler storage. If so, it's almost certainly also necessary to perform a [DB migration](../db-migration/). * Add a deprecation jira ticket into the vCurrent+1 release candidate Modified: aurora/site/source/documentation/latest/features/job-updates.md URL: http://svn.apache.org/viewvc/aurora/site/source/documentation/latest/features/job-updates.md?rev=1814960&r1=1814959&r2=1814960&view=diff ============================================================================== --- aurora/site/source/documentation/latest/features/job-updates.md (original) +++ aurora/site/source/documentation/latest/features/job-updates.md Sat Nov 11 16:32:40 2017 @@ -70,7 +70,7 @@ acknowledging ("heartbeating") job updat service updates where explicit job health monitoring is vital during the entire job update lifecycle. Such job updates would rely on an external service (or a custom client) periodically pulsing an active coordinated job update via a -[pulseJobUpdate RPC](https://github.com/apache/aurora/blob/rel/0.18.1/api/src/main/thrift/org/apache/aurora/gen/api.thrift). +[pulseJobUpdate RPC](https://github.com/apache/aurora/blob/rel/0.19.0/api/src/main/thrift/org/apache/aurora/gen/api.thrift). A coordinated update is defined by setting a positive [pulse_interval_secs](../../reference/configuration/#updateconfig-objects) value in job configuration Modified: aurora/site/source/documentation/latest/features/multitenancy.md URL: http://svn.apache.org/viewvc/aurora/site/source/documentation/latest/features/multitenancy.md?rev=1814960&r1=1814959&r2=1814960&view=diff ============================================================================== --- aurora/site/source/documentation/latest/features/multitenancy.md (original) +++ aurora/site/source/documentation/latest/features/multitenancy.md Sat Nov 11 16:32:40 2017 @@ -24,8 +24,9 @@ assignment of [quota](#preemption). If y sysadmin. The environment component in the job key, serves as a namespace. The values for -environment are validated in the client and the scheduler so as to allow any of `devel`, `test`, -`production`, and any value matching the regular expression `staging[0-9]*`. +environment are validated in the scheduler. By default allowing any of `devel`, `test`, +`production`, and any value matching the regular expression `staging[0-9]*`. This validation can be +changed to allow any arbitrary regular expression by setting the scheduler option `allowed_job_environments`. None of the values imply any difference in the scheduling behavior. Conventionally, the "environment" is set so as to indicate a certain level of stability in the behavior of the job Modified: aurora/site/source/documentation/latest/features/sla-metrics.md URL: http://svn.apache.org/viewvc/aurora/site/source/documentation/latest/features/sla-metrics.md?rev=1814960&r1=1814959&r2=1814960&view=diff ============================================================================== --- aurora/site/source/documentation/latest/features/sla-metrics.md (original) +++ aurora/site/source/documentation/latest/features/sla-metrics.md Sat Nov 11 16:32:40 2017 @@ -63,7 +63,7 @@ relevant to uptime calculations. By appl transition records, we can build a deterministic downtime trace for every given service instance. A task going through a state transition carries one of three possible SLA meanings -(see [SlaAlgorithm.java](https://github.com/apache/aurora/blob/rel/0.18.1/src/main/java/org/apache/aurora/scheduler/sla/SlaAlgorithm.java) for +(see [SlaAlgorithm.java](https://github.com/apache/aurora/blob/rel/0.19.0/src/main/java/org/apache/aurora/scheduler/sla/SlaAlgorithm.java) for sla-to-task-state mapping): * Task is UP: starts a period where the task is considered to be up and running from the Aurora @@ -110,7 +110,7 @@ metric that helps track the dependency o * Per job - `sla_<job_key>_mtta_ms` * Per cluster - `sla_cluster_mtta_ms` * Per instance size (small, medium, large, x-large, xx-large). Size are defined in: -[ResourceBag.java](https://github.com/apache/aurora/blob/rel/0.18.1/src/main/java/org/apache/aurora/scheduler/resources/ResourceBag.java) +[ResourceBag.java](https://github.com/apache/aurora/blob/rel/0.19.0/src/main/java/org/apache/aurora/scheduler/resources/ResourceBag.java) * By CPU: * `sla_cpu_small_mtta_ms` * `sla_cpu_medium_mtta_ms` @@ -147,7 +147,7 @@ for a task.* * Per job - `sla_<job_key>_mtts_ms` * Per cluster - `sla_cluster_mtts_ms` * Per instance size (small, medium, large, x-large, xx-large). Size are defined in: -[ResourceBag.java](https://github.com/apache/aurora/blob/rel/0.18.1/src/main/java/org/apache/aurora/scheduler/resources/ResourceBag.java) +[ResourceBag.java](https://github.com/apache/aurora/blob/rel/0.19.0/src/main/java/org/apache/aurora/scheduler/resources/ResourceBag.java) * By CPU: * `sla_cpu_small_mtts_ms` * `sla_cpu_medium_mtts_ms` @@ -182,7 +182,7 @@ reflecting on the overall time it takes * Per job - `sla_<job_key>_mttr_ms` * Per cluster - `sla_cluster_mttr_ms` * Per instance size (small, medium, large, x-large, xx-large). Size are defined in: -[ResourceBag.java](https://github.com/apache/aurora/blob/rel/0.18.1/src/main/java/org/apache/aurora/scheduler/resources/ResourceBag.java) +[ResourceBag.java](https://github.com/apache/aurora/blob/rel/0.19.0/src/main/java/org/apache/aurora/scheduler/resources/ResourceBag.java) * By CPU: * `sla_cpu_small_mttr_ms` * `sla_cpu_medium_mttr_ms` Modified: aurora/site/source/documentation/latest/features/webhooks.md URL: http://svn.apache.org/viewvc/aurora/site/source/documentation/latest/features/webhooks.md?rev=1814960&r1=1814959&r2=1814960&view=diff ============================================================================== --- aurora/site/source/documentation/latest/features/webhooks.md (original) +++ aurora/site/source/documentation/latest/features/webhooks.md Sat Nov 11 16:32:40 2017 @@ -78,3 +78,35 @@ And an example of a response that you wi }, "oldState":{}} ``` + +By default, the webhook watches all TaskStateChanges and sends events to configured endpoint. If you +are only interested in certain types of TaskStateChange (transition to `LOST` or `FAILED` statuses), +you can specify a whitelist of the desired task statuses in webhook.json. The webhook will only send +the corresponding events for the whitelisted statuses to the configured endpoint. + +```json +{ + "headers": { + "Content-Type": "application/vnd.kafka.json.v1+json", + "Producer-Type": "reliable" + }, + "targetURL": "http://localhost:5000/", + "timeoutMsec": 50, + "statuses": ["LOST", "FAILED"] +} +``` + +If you want to whitelist all TaskStateChanges, you can add a wildcard character `*` to your whitelist +like below, or simply leave out the `statuses` field in webhook.json. + +```json +{ + "headers": { + "Content-Type": "application/vnd.kafka.json.v1+json", + "Producer-Type": "reliable" + }, + "targetURL": "http://localhost:5000/", + "timeoutMsec": 50, + "statuses": ["*"] +} +``` Modified: aurora/site/source/documentation/latest/operations/configuration.md URL: http://svn.apache.org/viewvc/aurora/site/source/documentation/latest/operations/configuration.md?rev=1814960&r1=1814959&r2=1814960&view=diff ============================================================================== --- aurora/site/source/documentation/latest/operations/configuration.md (original) +++ aurora/site/source/documentation/latest/operations/configuration.md Sat Nov 11 16:32:40 2017 @@ -104,7 +104,7 @@ can furthermore help with storage perfor ### `-native_log_zk_group_path` ZooKeeper path used for Mesos replicated log quorum discovery. -See [code](https://github.com/apache/aurora/blob/rel/0.18.1/src/main/java/org/apache/aurora/scheduler/log/mesos/MesosLogStreamModule.java) for +See [code](https://github.com/apache/aurora/blob/rel/0.19.0/src/main/java/org/apache/aurora/scheduler/log/mesos/MesosLogStreamModule.java) for other available Mesos replicated log configuration options and default values. ### Changing the Quorum Size @@ -167,7 +167,7 @@ the latter needs to be enabled via: -enable_revocable_ram=true -Unless you want to use the [default](https://github.com/apache/aurora/blob/rel/0.18.1/src/main/resources/org/apache/aurora/scheduler/tiers.json) +Unless you want to use the [default](https://github.com/apache/aurora/blob/rel/0.19.0/src/main/resources/org/apache/aurora/scheduler/tiers.json) tier configuration, you will also have to specify a file path: -tier_config=path/to/tiers/config.json Modified: aurora/site/source/documentation/latest/reference/configuration.md URL: http://svn.apache.org/viewvc/aurora/site/source/documentation/latest/reference/configuration.md?rev=1814960&r1=1814959&r2=1814960&view=diff ============================================================================== --- aurora/site/source/documentation/latest/reference/configuration.md (original) +++ aurora/site/source/documentation/latest/reference/configuration.md Sat Nov 11 16:32:40 2017 @@ -44,7 +44,7 @@ behavior with its optional attributes. R **max_failures** | Integer | Maximum process failures (Default: 1) **daemon** | Boolean | When True, this is a daemon process. (Default: False) **ephemeral** | Boolean | When True, this is an ephemeral process. (Default: False) - **min_duration** | Integer | Minimum duration between process restarts in seconds. (Default: 15) + **min_duration** | Integer | Minimum duration between process restarts in seconds. (Default: 5) **final** | Boolean | When True, this process is a finalizing one that should run last. (Default: False) **logger** | Logger | Struct defining the log behavior for the process. (Default: Empty) @@ -339,7 +339,7 @@ Job Schema ```name``` | String | Job name. (Default: inherited from the task attribute's name) ```role``` | String | Job role account. Required. ```cluster``` | String | Cluster in which this job is scheduled. Required. - ```environment``` | String | Job environment, default ```devel```. Must be one of ```prod```, ```devel```, ```test``` or ```staging<number>```. + ```environment``` | String | Job environment, default ```devel```. By default must be one of ```prod```, ```devel```, ```test``` or ```staging<number>``` but it can be changed by the Cluster operator using the scheduler option `allowed_job_environments`. ```contact``` | String | Best email address to reach the owner of the job. For production jobs, this is usually a team mailing list. ```instances```| Integer | Number of instances (sometimes referred to as replicas or shards) of the task to create. (Default: 1) ```cron_schedule``` | String | Cron schedule in cron format. May only be used with non-service jobs. See [Cron Jobs](../../features/cron-jobs/) for more information. Default: None (not a cron job.) @@ -475,7 +475,7 @@ unified-container, the container can be param | type | description ----- | :----: | ----------- ```container_path``` | String | Path on the host to mount. - ```volume_path``` | String | Mount point in the container. + ```host_path``` | String | Mount point in the container. ```mode``` | Enum | Mode of the mount, can be 'RW' or 'RO'. ### AppcImage @@ -528,26 +528,31 @@ See [Docker Command Line Reference](http ### HttpLifecycleConfig Objects - param | type | description - ----- | :----: | ----------- - ```port``` | String | The named port to send POST commands (Default: health) - ```graceful_shutdown_endpoint``` | String | Endpoint to hit to indicate that a task should gracefully shutdown. (Default: /quitquitquit) - ```shutdown_endpoint``` | String | Endpoint to hit to give a task its final warning before being killed. (Default: /abortabortabort) +*Note: The combined `graceful_shutdown_wait_secs` and `shutdown_wait_secs` is implicitly upper bounded by the `--stop_timeout_in_secs` flag exposed by the executor (see options [here](https://github.com/apache/aurora/blob/master/src/main/python/apache/aurora/executor/bin/thermos_executor_main.py), default is 2 minutes). Therefore, if the user specifies values that add up to more than `--stop_timeout_in_secs`, the task will be killed earlier than the user anticipates (see the termination lifecycle [here](https://aurora.apache.org/documentation/latest/reference/task-lifecycle/#forceful-termination-killing-restarting)). Furthermore, `stop_timeout_in_secs` itself is implicitly upper bounded by two scheduler options: `transient_task_state_timeout` and `preemption_slot_hold_time` (see reference [here](http://aurora.apache.org/documentation/latest/reference/scheduler-configuration/). If the `stop_timeout_in_secs` exceeds either of these scheduler options, tasks could be designated as LOST or tasks utilizing preemption could lose their desired slot respectively. Cluster operators should be aware of these timings should they change the defaults.* + + param | type | description + ----- | :----: | ----------- + ```port``` | String | The named port to send POST commands. (Default: health) + ```graceful_shutdown_endpoint``` | String | Endpoint to hit to indicate that a task should gracefully shutdown. (Default: /quitquitquit) + ```shutdown_endpoint``` | String | Endpoint to hit to give a task its final warning before being killed. (Default: /abortabortabort) + ```graceful_shutdown_wait_secs``` | Integer | The amount of time (in seconds) to wait after hitting the ```graceful_shutdown_endpoint``` before proceeding with the [task termination lifecycle](https://aurora.apache.org/documentation/latest/reference/task-lifecycle/#forceful-termination-killing-restarting). (Default: 5) + ```shutdown_wait_secs``` | Integer | The amount of time (in seconds) to wait after hitting the ```shutdown_endpoint``` before proceeding with the [task termination lifecycle](https://aurora.apache.org/documentation/latest/reference/task-lifecycle/#forceful-termination-killing-restarting). (Default: 5) #### graceful_shutdown_endpoint If the Job is listening on the port as specified by the HttpLifecycleConfig (default: `health`), a HTTP POST request will be sent over localhost to this endpoint to request that the task gracefully shut itself down. This is a -courtesy call before the `shutdown_endpoint` is invoked a fixed amount of -time later. +courtesy call before the `shutdown_endpoint` is invoked +`graceful_shutdown_wait_secs` seconds later. #### shutdown_endpoint If the Job is listening on the port as specified by the HttpLifecycleConfig (default: `health`), a HTTP POST request will be sent over localhost to this endpoint to request as a final warning before being shut down. If the task -does not shut down on its own after this, it will be forcefully killed +does not shut down on its own after `shutdown_wait_secs` seconds, it will be +forcefully killed. Specifying Scheduling Constraints Modified: aurora/site/source/documentation/latest/reference/scheduler-configuration.md URL: http://svn.apache.org/viewvc/aurora/site/source/documentation/latest/reference/scheduler-configuration.md?rev=1814960&r1=1814959&r2=1814960&view=diff ============================================================================== --- aurora/site/source/documentation/latest/reference/scheduler-configuration.md (original) +++ aurora/site/source/documentation/latest/reference/scheduler-configuration.md Sat Nov 11 16:32:40 2017 @@ -16,10 +16,6 @@ Required flags: Directory to store backups under. Will be created if it does not exist. -cluster_name [not null] Name to identify the cluster being served. --db_max_active_connection_count [must be > 0] - Max number of connections to use with database via MyBatis --db_max_idle_connection_count [must be > 0] - Max number of idle connections to the database via MyBatis -framework_authentication_file Properties file which contains framework credentials to authenticate with Mesosmaster. Must contain the properties 'aurora_authentication_principal' and 'aurora_authentication_secret'. -ip @@ -50,6 +46,8 @@ Optional flags: Allow jobs to request Mesos GPU resource. -allowed_container_types (default [MESOS]) Container types that are allowed to be used by jobs. +-allowed_job_environments (default ^(prod|devel|test|staging\d*)$) + Regular expression describing the environments that are allowed to be used by jobs. -async_slot_stat_update_interval (default (1, mins)) Interval on which to try to update open slot stats. -async_task_stat_update_interval (default (1, hrs)) @@ -70,10 +68,6 @@ Optional flags: TimeZone to use for cron predictions. -custom_executor_config [file must exist, file must be readable] Path to custom executor settings configuration file. --db_lock_timeout (default (1, mins)) - H2 table lock timeout --db_row_gc_interval (default (2, hrs)) - Interval on which to scan the database for unused row references. -default_docker_parameters (default {}) Default docker parameters for any job that does not explicitly declare parameters. -dlog_max_entry_size (default (512, KB)) @@ -84,10 +78,6 @@ Optional flags: Specifies the frequency at which snapshots of local storage are taken and written to the log. -enable_cors_for List of domains for which CORS support should be enabled. --enable_db_metrics (default true) - Whether to use MyBatis interceptor to measure the timing of intercepted Statements. --enable_h2_console (default false) - Enable H2 DB management console. -enable_mesos_fetcher (default false) Allow jobs to pass URIs to the Mesos Fetcher. Note that enabling this feature could pose a privilege escalation threat. -enable_preemptor (default true) @@ -226,12 +216,6 @@ Optional flags: Metric categories collected for production tasks. -sla_stat_refresh_interval (default (1, mins)) The SLA stat refresh interval. --slow_query_log_threshold (default (25, ms)) - Log all queries that take at least this long to execute. --slow_query_log_threshold (default (25, ms)) - Log all queries that take at least this long to execute. --snapshot_hydrate_stores (default [locks, hosts, quota, job_updates]) - Which H2-backed stores to fully hydrate on the Snapshot. -stat_retention_period (default (1, hrs)) Time for a stat to be retained in memory before expiring. -stat_sampling_interval (default (1, secs)) @@ -248,10 +232,10 @@ Optional flags: A comma separated list of additional resources to copy into the sandbox.Note: if thermos_executor_path is not the thermos_executor.pex file itself, this must include it. -thermos_home_in_sandbox (default false) If true, changes HOME to the sandbox before running the executor. This primarily has the effect of causing the executor and runner to extract themselves into the sandbox. +-thrift_method_interceptor_modules (default []) + Additional Guice modules for intercepting Thrift method calls. -transient_task_state_timeout (default (5, mins)) The amount of time after which to treat a task stuck in a transient state as LOST. --use_beta_db_task_store (default false) - Whether to use the experimental database-backed task store. -viz_job_url_prefix (default ) URL prefix for job container stats. -zk_chroot_path Modified: aurora/site/source/documentation/latest/reference/task-lifecycle.md URL: http://svn.apache.org/viewvc/aurora/site/source/documentation/latest/reference/task-lifecycle.md?rev=1814960&r1=1814959&r2=1814960&view=diff ============================================================================== --- aurora/site/source/documentation/latest/reference/task-lifecycle.md (original) +++ aurora/site/source/documentation/latest/reference/task-lifecycle.md Sat Nov 11 16:32:40 2017 @@ -81,8 +81,10 @@ In any case, the responsible executor on sequence when killing a running task: 1. If a `HttpLifecycleConfig` is not present, skip to (4). - 2. Send a POST to the `graceful_shutdown_endpoint` and wait 5 seconds. - 3. Send a POST to the `shutdown_endpoint` and wait 5 seconds. + 2. Send a POST to the `graceful_shutdown_endpoint` and wait + `graceful_shutdown_wait_secs` seconds. + 3. Send a POST to the `shutdown_endpoint` and wait + `shutdown_wait_secs` seconds. 4. Send SIGTERM (`kill`) and wait at most `finalization_wait` seconds. 5. Send SIGKILL (`kill -9`). Modified: aurora/site/source/layouts/post.erb URL: http://svn.apache.org/viewvc/aurora/site/source/layouts/post.erb?rev=1814960&r1=1814959&r2=1814960&view=diff ============================================================================== --- aurora/site/source/layouts/post.erb (original) +++ aurora/site/source/layouts/post.erb Sat Nov 11 16:32:40 2017 @@ -13,7 +13,10 @@ Apache Aurora Blog <% end %> <span class="author_contact"> <p><strong><%= current_page.data.post_author.display_name %></strong></p> - <p><a href="http://twitter.com/<%= current_page.data.post_author.twitter %>">@<%= current_page.data.post_author.twitter %></a></p> + <% if current_page.data.post_author.twitter %> + <p><a href="http://twitter.com/<%= current_page.data.post_author.twitter %>">@<%= current_page.data.post_author.twitter +%></a></p> + <% end %> </span> </span> <p><em>Posted <%= current_article.date.strftime("%B %e, %Y") %></em></p> @@ -37,4 +40,4 @@ Apache Aurora Blog <%= yield %> </div> </div> -<% end %> \ No newline at end of file +<% end %>