{"version":3,"sources":["/home/madhan/Apache/git/atlas/docs/target/src/documents/Notifications.md","/home/madhan/Apache/git/atlas/docs/target/theme/styles/styled-colors.js"],"names":["layoutProps","MDXContent","components","props","mdxType","wrapLines","language","style","theme","parentName","isMDXComponent","dark","hljs","color"],"mappings":"wkBAWMA,EAAc,GAIL,SAASC,EAAW,GAG/B,IAFFC,EAAU,EAAVA,WACGC,EAAK,iBAER,OAAO,cALS,UAKC,iBAAKH,EAAiBG,EAAK,CAAED,WAAYA,EAAYE,QAAQ,cAE5E,oBACE,GAAM,iBAAe,iBAEvB,oBACE,GAAM,mCAAiC,mCAEzC,uTAGA,oBACE,GAAM,8CAA4C,gDAEpD,qGACA,cAAC,IAAiB,CAACC,WAAW,EAAMC,SAAS,QAAQC,MAAOC,IAAYJ,QAAQ,qBAAmB,4dAQnG,oEACA,cAAC,IAAiB,CAACC,WAAW,EAAMC,SAAS,QAAQC,MAAOC,IAAYJ,QAAQ,qBAAmB,yGAKnG,oBACE,GAAM,2DAAyD,8DAEjE,2IACA,uBAAG,wBAAQK,WAAW,KAAI,oBAAIA,WAAW,UAAQ,gBACjD,cAAC,IAAiB,CAACJ,WAAW,EAAMC,SAAS,QAAQC,MAAOC,IAAYJ,QAAQ,qBAAmB,4aAQnG,oEACA,cAAC,IAAiB,CAACC,WAAW,EAAMC,SAAS,QAAQC,MAAOC,IAAYJ,QAAQ,qBAAmB,oFAKnG,wZAGA,cAAC,IAAiB,CAACC,WAAW,EAAMC,SAAS,QAAQC,MAAOC,IAAYJ,QAAQ,qBAAmB,wCAGnG,oBACE,GAAM,iCAA+B,iCAEvC,+QAEA,cAAC,IAAiB,CAACC,WAAW,EAAMC,SAAS,QAAQC,MAAOC,IAAYJ,QAAQ,qBAAmB,4gCAWtG,oLAEDH,EAAWS,gBAAiB,G,+DC3F5B,iFAqBAC,IAAKC,KAAKC,MAAQ,UACHF,MAAI","file":"static/js/documents-notifications.58adc50d.js","sourcesContent":["\nimport React from 'react'\nimport { mdx } from '@mdx-js/react'\n\n/* @jsxRuntime classic */\n/* @jsx mdx */\nimport  themen  from 'theme/styles/styled-colors';\nimport  * as theme  from 'react-syntax-highlighter/dist/esm/styles/hljs';\nimport SyntaxHighlighter from 'react-syntax-highlighter';\n\n\nconst layoutProps = {\n  \n};\nconst MDXLayout = \"wrapper\"\nexport default function MDXContent({\n  components,\n  ...props\n}) {\n  return <MDXLayout {...layoutProps} {...props} components={components} mdxType=\"MDXLayout\">\n\n    <h1 {...{\n      \"id\": \"notifications\"\n    }}>{`Notifications`}</h1>\n    <h2 {...{\n      \"id\": \"notifications-from-apache-atlas\"\n    }}>{`Notifications from Apache Atlas`}</h2>\n    <p>{`Apache Atlas sends notifications about metadata changes to Kafka topic named ATLAS_ENTITIES .\nApplications interested in metadata changes can monitor for these notifications.\nFor example, Apache Ranger processes these notifications to authorize data access based on classifications.`}</p>\n    <h3 {...{\n      \"id\": \"notifications---v2-apache-atlas-version-10\"\n    }}>{`Notifications - V2: Apache Atlas version 1.0`}</h3>\n    <p>{`Apache Atlas 1.0 sends notifications for following operations on metadata.`}</p>\n    <SyntaxHighlighter wrapLines={true} language=\"shell\" style={theme.dark} mdxType=\"SyntaxHighlighter\">\n   {`ENTITY_CREATE:         sent when an entity instance is created\n      ENTITY_UPDATE:         sent when an entity instance is updated\n      ENTITY_DELETE:         sent when an entity instance is deleted\n      CLASSIFICATION_ADD:    sent when classifications are added to an entity instance\n      CLASSIFICATION_UPDATE: sent when classifications of an entity instance are updated\n      CLASSIFICATION_DELETE: sent when classifications are removed from an entity instance`}\n </SyntaxHighlighter>\n    <p>{`Notification includes the following data.`}</p>\n    <SyntaxHighlighter wrapLines={true} language=\"shell\" style={theme.dark} mdxType=\"SyntaxHighlighter\">\n      {`AtlasEntity  entity;\n   OperationType operationType;\n   List<AtlasClassification>  classifications;`}\n    </SyntaxHighlighter>\n    <h3 {...{\n      \"id\": \"notifications---v1-apache-atlas-version-08x-and-earlier\"\n    }}>{`Notifications - V1: Apache Atlas version 0.8.x and earlier`}</h3>\n    <p>{`Notifications from Apache Atlas version 0.8.x and earlier have content formatted differently, as detailed below.`}</p>\n    <p><strong parentName=\"p\"><em parentName=\"strong\">{`Operations`}</em></strong></p>\n    <SyntaxHighlighter wrapLines={true} language=\"shell\" style={theme.dark} mdxType=\"SyntaxHighlighter\">\n   {`ENTITY_CREATE: sent when an entity instance is created\n      ENTITY_UPDATE: sent when an entity instance is updated\n      ENTITY_DELETE: sent when an entity instance is deleted\n      TRAIT_ADD:     sent when classifications are added to an entity instance\n      TRAIT_UPDATE:  sent when classifications of an entity instance are updated\n      TRAIT_DELETE:  sent when classifications are removed from an entity instance`}\n    </SyntaxHighlighter>\n    <p>{`Notification includes the following data.`}</p>\n    <SyntaxHighlighter wrapLines={true} language=\"shell\" style={theme.dark} mdxType=\"SyntaxHighlighter\">\n      {`Referenceable entity;\n   OperationType operationType;\n   List<Struct>  traits;`}\n    </SyntaxHighlighter>\n    <p>{`Apache Atlas 1.0 can be configured to send notifications in older version format, instead of the latest version format.\nThis can be helpful in deployments that are not yet ready to process notifications in the latest version format.\nTo configure Apache Atlas 1.0 to send notifications in earlier version format, please set following configuration in atlas-application.properties:`}</p>\n    <SyntaxHighlighter wrapLines={true} language=\"shell\" style={theme.dark} mdxType=\"SyntaxHighlighter\">\n atlas.notification.entity.version=v1\n    </SyntaxHighlighter>\n    <h2 {...{\n      \"id\": \"notifications-to-apache-atlas\"\n    }}>{`Notifications to Apache Atlas`}</h2>\n    <p>{`Apache Atlas can be notified of metadata changes and lineage via notifications to Kafka topic named ATLAS_HOOK.\nAtlas hooks for Apache Hive/Apache HBase/Apache Storm/Apache Sqoop use this mechanism to notify Apache Atlas of events of interest.`}</p>\n    <SyntaxHighlighter wrapLines={true} language=\"shell\" style={theme.dark} mdxType=\"SyntaxHighlighter\">\n      {`ENTITY_CREATE            : create an entity. For more details, refer to Java class HookNotificationV1.EntityCreateRequest\nENTITY_FULL_UPDATE       : update an entity. For more details, refer to Java class HookNotificationV1.EntityUpdateRequest\nENTITY_PARTIAL_UPDATE    : update specific attributes of an entity. For more details, refer to HookNotificationV1.EntityPartialUpdateRequest\nENTITY_DELETE            : delete an entity. For more details, refer to Java class HookNotificationV1.EntityDeleteRequest\nENTITY_CREATE_V2         : create an entity. For more details, refer to Java class HookNotification.EntityCreateRequestV2\nENTITY_FULL_UPDATE_V2    : update an entity. For more details, refer to Java class HookNotification.EntityUpdateRequestV2\nENTITY_PARTIAL_UPDATE_V2 : update specific attributes of an entity. For more details, refer to HookNotification.EntityPartialUpdateRequestV2\nENTITY_DELETE_V2         : delete one or more entities. For more details, refer to Java class HookNotification.EntityDeleteRequestV2`}\n    </SyntaxHighlighter>\n    </MDXLayout>;\n}\n;\nMDXContent.isMDXComponent = true;","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { dark } from \"react-syntax-highlighter/dist/esm/styles/hljs\";\n\n//dark[\"powershell\"][\"color\"] = \"#37bb9b\";\ndark.hljs.color = \"#37bb9b\";\nexport default dark;"],"sourceRoot":""}