Skip to content

Latest commit

 

History

History
1211 lines (645 loc) · 65.8 KB

CHANGELOG.md

File metadata and controls

1211 lines (645 loc) · 65.8 KB

1.70.11 (2024-03-07)

Bug Fixes

  • don't skip DbError in the ReportableError chain (#649) (c9b97d13)

1.70.10 (2024-03-06)

Features

  • include tags/extras across the exception chain (#648) (fb2b0ee7)

1.70.9 (2024-02-27)

Features

  • Make bigtable calls retryable (#591) (12dd7b41)
  • special case "chid-only" records (#646) (5ab83fb8)
  • report db pool metrics (#644) (93d4cd38)
  • Add timeouts for bigtable operations (#611) (34964235)

1.70.8 (2024-02-26)

Bug Fixes

  • don't ignore add_user errors (#640) (6a91bce5)

1.70.7 (2024-02-22)

Bug Fixes

  • retry get_user when the add_user condition fails (#637) (87ed38c3)
  • Add missing doc diagram. (#623) (12bce705)

1.70.6 (2024-02-22)

Features

  • prefer the simpler delete to avoid the admin API (#636) (0b7265ed)

1.70.5 (2024-02-22)

Bug Fixes

  • don't add_channels when there's none to add (#634) (b0ffa8cd)

1.70.4 (2024-02-20)

Features

  • have Bigtable match DynamoDB's metrics (#627) (0ce81aab)
  • have bigtable remove_channel write conditionally (#625) (60c6675b)

Bug Fixes

  • "recycle" the user object in update_token_route (#621) (4bd48278)

1.70.3 (2024-02-20)

Bug Fixes

  • fix add/update_user version field handling on migrations (#619) (1ff88e79)

1.70.2 (2024-02-15)

Bug Fixes

  • dual update_user calling add_user (c80866d6)

1.70.1 (2024-02-15)

Features

  • add metadata headers for bigtable (#586) (e043fb02)
  • simplify StoredNotifAutopushUser's on_start (#614) (c2841113)
  • simplify StoredNotifAutopushUser's on_start (0d0e99e6)
  • retry dynamodb HttpDispatch errors (#605) (cb1482de)
  • Elevate big table settings dump for deployment debug (#609) (7d29c16d)
  • put old AWS crap behind a feature flag (#606) (04df79e5)

Chore

  • deps-dev:
    • bump jinja2 from 3.1.2 to 3.1.3 in /tests (#549) (80c961a5)
    • bump cryptography from 41.0.7 to 42.0.0 in /tests (#600) (4fbbaea2)
    • bump cryptography from 41.0.7 to 42.0.0 in /tests (222c05cc)
    • bump jinja2 from 3.1.2 to 3.1.3 in /tests (3c7d900b)

Bug Fixes

  • add secondary_write for channels (#597) (37b377ae)
  • Isolate dynamodb to feature flag only (#612) (158e01c4)
  • Add errors for health check reporting (#610) (37a0724a)
  • reset the WebSocket every time it disconnects (#607) (9bb964c6)

1.70.0 (2024-02-06)

Refactor

  • cleanup add_channels to use mutate_row (#583) (db2e02ed)

Chore

Features

  • add a new test that produces stored notifs (#598) (a6bd3cd7)
  • filter reads by latest cell (#599) (e012955a)
  • [SYNC-3835] pydocstyle implementation (#585) (aa5773da)
  • Add integration test for dual mode (#582) (76848753)
  • don't store duplicated message columns (#581) (7f2396aa)
  • store the channel_id metadata in a single bigtable row (#574) (1716f205)

Bug Fixes

  • errors when deleting and provisioning load test clusters (#593) (925130a1)
  • fix remove_node_id's condition check to be more reliable (#590) (dc077623)
  • fetch messages shouldn't read the current timestamp's notif (#577) (fc99e774)
  • Clarify how the index for Row is used between reading and writing to Bigtable (#573) (09fe7ac2)

1.69.8 (2024-01-24)

Bug Fixes

  • channel_ids should continue being represented in hyphenated format (#561) (661a705d)
  • Use standard chidmessageid parser for remove_message (#555) (42775f9e)
  • filter by timestamp (#548) (b7cd357b)
  • don't assume topic chidmessageids in remove_message (#553) (e6729c06)
  • Add proper update_user logic for Bigtable (#503) (89c3bd98)
  • kill the delete_all_data_from_table flag (#541) (8c99f47c)
  • copy over the channels when migrating the user (#539) (e36b3fef)
  • remove unneeded clone operation (#521) (53b6f03f)

Features

  • set all column families (message) to maxversions=1 (#566) (464c87a5)
  • read via row ranges instead of regex (#564) (0a96e1b8)
  • Be more clear and consistent about features around dual (#557) (60c8b333)
  • save some cloning (possibly) (#563) (03afd7cc)
  • run integration tests against Bigtable (#558) (356f24cf)
  • run unit tests against the bigtable emulator (#547) (21e0d40c)
  • Add database routing support (#473) (5aea6548)
  • Report BigTableErrors with extra data (#530) (c7fa922f)
  • support dual mode data storage (#369) (6624a19a)
  • quiet remove_node_id's conditional failure case errors (#517) (7fe9d489)

Doc

  • update to the new autoconnect url (#538) (ac5c691f)
  • Document VAPID key should be base64 encoded (#535) (c9b9d6bd)

Chore

  • replace AUTOPUSH_ENDPOINT_URL and AUTOPUSH_SERVER_URL with LOCUST_HOST in load tests (#523) (b72dee15)
  • add build_load_test and deploy-load-test job to build-test-deploy ci workflow (05b6d448)
  • update python dependencies and fix mypy errors (a5d8828d)
  • upload integration test results to CircleCI test insights (#519) (ff882fea)
  • lint & make integration tests in autopush-rs (#518) (e3d38c6c)
  • deps: bump openssl from 0.10.57 to 0.10.60 (#525) (3b52f7b7)

1.69.7 (2023-11-13)

Features

  • demote retry message, dump vapid claims. (#510) (cc4048c7)
  • add actix_max_connections/workers settings (#515) (6f6289c3)
  • Add metrics for user creation/deletion. (#506) (bd2e0117)
  • only capture some SMError backtraces (#508) (8f6e03e3)

Bug Fixes

  • correct the ua.expiration metric's tag (#502) (ca002ec8)
  • add ReportableError::reportable_source (#500) (40487b76)

1.69.6 (2023-10-31)

Features

  • handle already connected users (#495) (eb53beca)

1.69.5 (2023-10-31)

Features

  • further detect common io errors in megaphone's updater (#492) (5421f581)

1.69.4 (2023-10-30)

Bug Fixes

  • split router endpoints into their own app (#491) (bbde5823)
  • defer Error::source methods to inner kind's (#486) (a9a17963)

Features

  • emit metrics for megaphone polling (#488) (ea302228)

1.69.3 (2023-10-26)

Doc

Bug Fixes

  • capture sentry events for the unidentified state (#484) (09db55f2)
  • Convert WSError(Timeout for Pong) to metric (#478) (cd597d39)

1.69.2 (2023-10-17)

Features

  • hide common SessionClosed errors from sentry (#470) (f069c2c9)

Chore

1.69.1 (2023-10-06)

Chore

Bug Fixes

  • allow invalid uaids in autoconnect (#464) (6da8c45e)

1.69.0 (2023-10-04)

Chore

Features

  • Use the calling crate's name and version for init_logging() (#461) (d3bd4c07)
  • Reject Legacy GCM endpoints (#459) (aaa47139)

1.68.3 (2023-10-02)

Breaking Changes

  • Run GCM through FCMv1 HTTP API (#455) (b2282277, breaks #)

Features

  • Run GCM through FCMv1 HTTP API (#455) (b2282277, breaks #)

Bug Fixes

  • re-enable slog's envlogger (#452) (e76b1198)
  • AutopushUser fails with WebSocketConnectionClosedException (5f8efb2d)

Test

  • calibrate load tests (1b5c5f99)
  • add subscribe and unsubscribe tasks to AutopushUser (07d988dd)

1.68.2 (2023-09-27)

Bug Fixes

  • Use warn!() to supplement sentry errors, since they don't show up regularly. (#449) (4eaa9a06)

Chore

1.68.1 (2023-09-27)

Bug Fixes

  • don't emit backtraces in Display (#447) (392f4e1e)

Chore

1.68.0 (2023-09-27)

Features

  • emit a tag in autoconnect's metrics (#435) (67186854)
  • Add send notification task to locust load test file (453ba8d4)
  • add an autoconnect-web Error type (#432) (58086e77)
  • switch the load tester to pypy-3.10 (#426) (5b4d6d71)
  • Update loadtests user and tests (d4af1bfe)
  • Add GCP BigTable support (#364) (608c52fe)
  • consolidate the sentry middlwares into autopush_common (e65486b9)
  • add stacktraces to some sentry events (#406) (0ded4de1)
  • Topic messages shouldn't have sortkey_timestamps (#402) (eeff8d71)
  • build/deploy an autoconnect docker (#396) (9ed4e6f0)
  • make DbClient's message table month optional (#393) (ab3614b7)
  • remove legacy table rotation (#389) (6aa107f5)

Doc

  • fill in some autoconnect TODO docs (#410) (74ffdb05)
  • Update docs for modern version of autopush (#388) (d36fb527)

Bug Fixes

  • Add better error messaging for GCM/FCM processing (#445) (2e48f504)
  • missing class-picker option in Kubernetes config (9d0faf7c)
  • apply fixes from code review 2 (7ea158d2)
  • apply fixes from code review (142c4d2c)
  • load test docker build error in GCP (e7e7539e)
  • remove print statement (2134d050)
  • load test script modifies kubernetes config on first run only (89dc80bc)
  • use explicit path (a51fca5c)
  • remove mozsvc-common (#394) (814ff49e)
  • remove mozsvc-common (#394) (66bb74f9)

Test

  • validate message schema in load tests with models (0d8c1c2f)
  • add a load test shape (f84e2665)
  • calibrate load tests (7a6c099f)

Chore

  • update user, spawn rate and time in load tests (b9a88e5a)
  • add python linters and formatters to CI (615b93ad)
  • deps:
    • bump gevent from 23.9.0.post1 to 23.9.1 in /tests/load (34eb330e)
    • bump cryptography from 40.0.2 to 41.0.4 in /tests (acd35f27)

1.67.3 (2023-06-01)

Bug Fixes

  • emit metrics also in the common Response error case (#384) (5bd09339)

1.67.2 (2023-05-30)

Chore

  • deps: bump requests from 2.30.0 to 2.31.0 in /tests (#380) (cdf91df6)

Features

  • switch to latest release a2 library (#362) (728fe169)
  • add broadcast (megaphone) support (#381) (97d3a3ae)
  • complete (mostly) the WebPushClient (#379) (f7110214)
  • move tests to python3 (08bd46b8)

1.67.1 (2023-05-05)

Bug Fixes

  • disable sentry's debug-images feature (#375) (ed730974)

1.67.0 (2023-05-02)

Refactor

  • more db_client -> db (61beb2e1)
  • options -> app_state (5a6a35a5)
  • reduce settings duplication w/ deserialize_with (4f3e4501)
  • move broadcast/protocol/registry into a common crate (#357) (fa9109dc)

Features

  • metric message table rotations (#371) (647ffb14)
  • quiet more router errors from sentry (#368) (f90fc066)
  • add the initial autoconnect-ws/state machine crates (#363) (b4298eab)
  • reduce the number of errors reported to sentry.io (#358) (a9a88f34)
  • Add metrics to try and analyze UpdateItem bug. (#344) (7641d18d)
  • Add extra to sentry. [CONSVC-1886] (#333) (008e3e8c)

Bug Fixes

  • don't eat WebpushSocket poll_complete errors (#374) (f8e65255)
  • Add back missing metrics (#372) (19525593)
  • make CORS default less restrictive. (#348) (d421e8de)
  • channel_id should be hyphenated (#365) (0067ae42)

1.66.0 (2023-01-23)

Chore

Bug Fixes

  • silence data overflow error in sentry (#327) (202fba6)

Features

  • add metrics for vapid errors (#340) (922fcf8d)
  • add timeouts for Client::reqwest calls [CONSVC-3289] (#329) (e0c370ae)
  • modernize to rust 1.65 (#337) (07b67bd)
  • add additional metrics for message tracking (#330) (65ac1a3)

Doc

  • Add mobile debugging steps to README (#339) (9238056)
  • Fix typo in README.md file (thanks @dev-aniketj) (#341)

1.65.0 (2022-07-20)

Features

  • allow for standard base64 private keys (#323) (7ec9e541)

Chore

(2022-07-13)

Bug Fixes

  • add jitter to retry (#319) (3272fdec)
  • various mini-patches for FxA integration work (#321) (b2b6bfd3)
    • Added more verbose trace! and debug! logging messages.
    • ignore padding errors for VAPID keys
    • bumped up default max bytes to handle base64 encoded 4096 block
    • record the VapidError as an info before we send it to metrics

Chore

Breaking Changes

  • Update for Jun 2022: Alters env var key names (#313) (1ec85899) Broke: Environment var key changes from:

    AUTOPUSH_ => AUTOPUSH__

    AUTOEND_ => AUTOEND__

1.63.0 (2022-06-02)

Chore

Bug Fixes

Features

  • Add tool to generate endpoints (#307) (2829fa42)

1.62.0 (2022-05-05)

Bug Fixes:
  • bug: add app_id to error message, Add GCM data sends (d2cd2ee5, closes #303))

1.61.0 (2022-03-22)

Features

  • add status code and errno to reported metric for bridged errors (#291) (772f020b, closes #288)

Chore

1.60.0 (2022-03-22)

Bug Fixes

  • bug: Do not report non-actionable errors to sentry (#299) (3d18b10d2)

Features

  • feat: return more explicit VAPID error message (#299) (3d18b10d2)

Chore

1.59.1 (2022-02-25)

Chore

1.59.0 (2022-02-25)

Chore

Bug Fixes

Features

  • Report bridge status via __heartbeat__ (#295) (4e85e401, closes #294)
  • Standardize to /__error__ for sentry error check (#278) (3f0dc8f4, closes #274)

1.58.0 (2021-10-13)

Bug Fixes

  • fix local Authorization header (#284) (0027d78f, closes #282)

Features

  • Standardize to /__error__ for sentry error check (#278) (3f0dc8f4, closes #274)

Chore

  • Dep update for Jul 2021 (#283) (230fb191)
  • library update for Jun 2021 (#280) (5e9aabfe)

1.57.8 (2021-06-02)

Bug Fixes

  • use sentry 0.19 to match our backend server (#276) (44c85c0c, closes #275)

Features

  • Drop aesgcm128 support (#268) (d8b7ca83)

Chore

1.57.7 (2021-03-26)

Chore

Bug Fixes

  • Add explicit endpoint_url setting (#270) (5649d966, closes #269)

1.57.6 (2021-03-16)

Bug

  • always return status 201 for success (267213b8, closes #259)

Features

  • convert FCM credential to string parameter (5ba885af, closes #254)

Chore

1.57.5 (2021-03-01)

Chore

Features

  • convert FCM credential to string parameter (5ba885af, closes #254)

1.57.4 (2021-02-23)

Chore

  • Set baseline hyper version (8bb5998c, closes #251)
  • Update dependencies where possible. (#250) (d9446f63)
  • move a2 under mozilla-services (#245) (1300a4dc, closes #236)
  • release/1.57.3 (#243) (9bc9fef0)

1.57.3 (2020-12-02)

Bug Fixes

  • Accept either paths or strings containing the cert for APNS (#241) (b3dd8a3e, closes #240)

Chore

1.57.1 (2020-11-19)

Bug Fixes

Chore

  • release 1.57.0 (#231) (761d91f4)
  • update circleci to use new docker auth (fabe4954)

1.57.0 (2020-10-16)

Features

  • Include minimal debug info in release builds (#215) (fd659e3e, closes #77)
  • Support "gcm" as an alias to "fcm" (#211) (fd0d63d2, closes #204)
  • Add the log-check route and remove unused ApiError variants/impls (#209) (1b0b18b3, closes #208)
  • Amazon Device Messaging router (#207) (c587446a, closes #165)
  • Use autoendpoint-rs in integration tests (#205) (31d2d19c, closes #168)
  • Add the unregister user route (#195) (b4bb1636, closes #179)
  • APNS Router (#201) (ce51957f, closes #164)
  • New channel endpoint (#189) (6cc9a7dc)
  • Update token endpoint (#188) (bb395fb2, closes #177)
  • Sentry integration for autoendpoint (#196) (674d7d2c, closes #155)
  • Delete message endpoint (#186) (6a7fa492, closes #175)
  • User registration (#185) (6df3e36b, closes #176)
  • Route notifications to FCM (Android) (#171) (d9a0d9d7, closes #162)
  • Route notifications to autopush connection servers (#167) (e73dff17, closes #161)
  • Return detailed autoendpoint errors (#170) (91d483ab, closes #159)
  • Record the encoding in a metric if there is an encrypted payload (#166) (8451d3f9)
  • Validate autoendpoint JWT tokens (#154) (04fee7f9, closes #103)
  • Validate user subscription data in autoendpoint (#160) (8efa42c8, closes #156)
  • Basic autoendpoint extractors (#151) (b08fdbdd)

Bug Fixes

  • enforce VAPID aud (#225) (e3963262)
  • Fix debug info setting being ignored (#219) (35a9d4f6)
  • Check the max data size against the final message payload (#212) (4e07ff07, closes #203)
  • Drop 0 TTL WebPush notifications if they aren't delivered the first time (#210) (a28cb295)
  • Fix having extra slashes in the endpoint URL (#206) (f943659e)
  • Drop unknown FCM users (#197) (068f54dd, closes #173)
  • Strip padding and double quotes from encryption and crypto-key headers (#200) (e20fc6af, closes #192)
  • Copy and upgrade parts of DynamoStorage into autoendpoint (#174) (120a46b7, closes #172)
  • Use errnos from validation errors (#184) (147aed84)

Doc

  • Add a fernet_key.py script for generating Fernet keys (#218) (aa0e9d96, closes #217)
  • Add a sample config for autopush and fix some settings (#216) (5badbfbe)
  • Add a sample config for autoendpoint and normalize router settings (#214) (3b30d694)

Chore

1.57.0 (2020-10-16)

Includes autoendpoint

Bug Fixes

  • Fix debug info setting being ignored (#219) (35a9d4f6)
  • Check the max data size against the final message payload (#212) (4e07ff07, closes #203)
  • Drop 0 TTL WebPush notifications if they aren't delivered the first time (#210) (a28cb295)
  • Fix having extra slashes in the endpoint URL (#206) (f943659e)
  • Drop unknown FCM users (#197) (068f54dd, closes #173)
  • Strip padding and double quotes from encryption and crypto-key headers (#200) (e20fc6af, closes #192)
  • Copy and upgrade parts of DynamoStorage into autoendpoint (#174) (120a46b7, closes #172)
  • Use errnos from validation errors (#184) (147aed84)

Doc

  • Add a fernet_key.py script for generating Fernet keys (#218) (aa0e9d96, closes #217)
  • Add a sample config for autopush and fix some settings (#216) (5badbfbe)
  • Add a sample config for autoendpoint and normalize router settings (#214) (3b30d694)

Features

  • Include minimal debug info in release builds (#215) (fd659e3e, closes #77)
  • Support "gcm" as an alias to "fcm" (#211) (fd0d63d2, closes #204)
  • Add the log-check route and remove unused ApiError variants/impls (#209) (1b0b18b3, closes #208)
  • Amazon Device Messaging router (#207) (c587446a, closes #165)
  • Use autoendpoint-rs in integration tests (#205) (31d2d19c, closes #168)
  • Add the unregister user route (#195) (b4bb1636, closes #179)
  • APNS Router (#201) (ce51957f, closes #164)
  • New channel endpoint (#189) (6cc9a7dc)
  • Update token endpoint (#188) (bb395fb2, closes #177)
  • Sentry integration for autoendpoint (#196) (674d7d2c, closes #155)
  • Delete message endpoint (#186) (6a7fa492, closes #175)
  • User registration (#185) (6df3e36b, closes #176)
  • Route notifications to FCM (Android) (#171) (d9a0d9d7, closes #162)
  • Route notifications to autopush connection servers (#167) (e73dff17, closes #161)
  • Return detailed autoendpoint errors (#170) (91d483ab, closes #159)
  • Record the encoding in a metric if there is an encrypted payload (#166) (8451d3f9)
  • Validate autoendpoint JWT tokens (#154) (04fee7f9, closes #103)
  • Validate user subscription data in autoendpoint (#160) (8efa42c8, closes #156)
  • Basic autoendpoint extractors (#151) (b08fdbdd)

Chore

  • Re-enable cargo-audit in CI (#221) (e8179a85)
  • Update Docker rust to 1.45 (#193) (9dd589ce)

1.55.0 (2020-04-10)

Chore

Test

Bug Fixes

1.54.4 (2019-10-25)

Chore

1.54.3 (2019-10-11)

Bug Fixes

  • report Megaphone errors to Sentry (0b6eed61)

1.54.2 (2019-09-19)

Bug Fixes

1.54.1 (2019-08-16)

Chore

  • update to latest rust/debian buster (9b089fb4, closes #110)

1.54.0 (2019-08-06)

Refactor

  • simplify srv usage (1086de7b)
  • split connection node from common for later endpoint (e523d739, closes #99)

Features

Chore

  • force update smallvec 0.6 & crossbeam-epoch (memoffset) (abbd6257, closes #110)
  • adapt to new woothee/tungstenite (906cc2c5, closes #110)
  • update deps minus hyper 0.12 (eaaccc09)

1.53.1 (2019-02-14)

Features

  • retry all dynamodb errors correctly, hide invalid chids (58152230, closes #95)

Chore

1.53.0 (2019-01-19)

Bug Fixes

  • capture additional errors that shouldn't be reported to Sentry (3f5f24f6, closes #87)
  • return correct not found for disconnected client and fix tests (5d6d29df, closes #89)

Chore

1.52.0 (2018-10-12)

Bug Fixes

  • quick workaround for rusoto's hyper upgrade (06eff39b)

Chore

  • upgrade to latest rust (4230d0cf)
  • upgrade test_integrations deps (93a5df21)
  • upgrade dependencies minus hyper and woothee (790ebdbb)

1.51.2 (2018-09-14)

Features

  • clean-up sentry error reporting and reduce spurious reporting (f0bb4e0e, closes #71)

Bug Fixes

  • ignore invalid state transitions (464e5f93)
  • don't include ports for schemes they aren't needed for (4698f06f)
  • use latest sentry (79b0fedb)

1.51.1 (2018-08-30)

Features

  • fix sentry test and add release data to sentry errors (8e59c674, closes #66)

1.51.0 (2018-08-30)

Features

  • upgrade sentry to 0.8.0 and log out errors (3ec1d3c8, closes #5)
  • return broadcast errors for invalid broadcast id's (ee7cb913, closes #59)
  • notify other nodes if user has reconnected for missed messages (10152fcb, closes #58)

Chore

1.50.0 (2018-08-16)

Bug Fixes

  • don't render topic/timestamp to the ua (8aa47af4)

1.49.7 (2018-08-07)

Features

  • support webpush API pings (2366efe4, closes #55)
  • log out disconnect reason with session statistics (1109aa2f)

1.49.6 (2018-08-02)

Chore

  • include CIRCLE_TAG in the cache key (d85cee70)

1.49.5 (2018-08-02)

Bug Fixes

1.49.4 (2018-08-01)

Bug Fixes

  • oops, check the user's actual month for validity (8b4eb87a, closes #47)

1.49.3 (2018-07-30)

1.49.2 (2018-07-27)

Bug Fixes

  • limit valid message tables to the last 3 (69adfb4e)

1.49.1 (2018-07-26)

Features

  • log out failed conversion items and use histogram for timers (05a71d9b)

1.49.0 (2018-07-20)

Refactor

  • push table names down into DynamoStorage (750c00ff)
  • split SendThenWait into 2 states (155b9fc0)

Features

Bug Fixes

  • typo and image link fix (903e46d8)
  • drop users with too many stored messages (86c65cae, closes #25)

1.48.2 (2018-07-10)

Features

  • setup a cadence error handler (26bb9084, closes #3)

Bug Fixes

  • stop notification fetch spinning (72a85ebb)
  • fix unset connected_at values (8f81af35, closes #24)

Refactor

1.48.1 (2018-06-26)

Chore

  • disable default app user for now (2b7d1a9e)

Bug Fixes

  • fix hostname lookup not including a port (b6f57cb8)
  • resolve intermittent monthly integration test fails (3ee6614c)
  • detailed resolver errors (6bb28548)

1.48.0 (2018-06-22)

Chore

Bug Fixes

  • match python autopush's crypto_key format (0eeabcbf, closes #11)

Features

  • transfer python integration tests and docker/circlci building (60deca51, closes #1)
  • initial transfer of Rust autopush code (2e4818db)

Doc