From 373247d697df03bec8024c2cc37c469ff97a00ad Mon Sep 17 00:00:00 2001 From: nicolethoen Date: Fri, 6 Jan 2023 15:24:11 -0500 Subject: [PATCH] chore: clean up more extensions code --- packages/react-log-viewer/CHANGELOG.md | 6003 -------- packages/react-log-viewer/package.json | 46 - .../src/LogViewer/LogViewer.tsx | 314 - .../src/LogViewer/LogViewerContext.tsx | 26 - .../src/LogViewer/LogViewerRow.tsx | 86 - .../src/LogViewer/LogViewerSearch.tsx | 126 - .../src/LogViewer/demos/LogViewer.md | 272 - .../src/LogViewer/examples/LogViewer.md | 201 - .../src/LogViewer/examples/realTestData.js | 10 - .../react-log-viewer/src/LogViewer/index.ts | 3 - .../src/LogViewer/utils/constants.ts | 8 - .../src/LogViewer/utils/utils.tsx | 80 - .../react-log-viewer/src/ansi_up/ansi_up.ts | 728 - packages/react-log-viewer/src/index.ts | 1 - .../src/react-window/VariableSizeList.tsx | 244 - .../src/react-window/areEqual.ts | 11 - .../src/react-window/createListComponent.ts | 490 - .../src/react-window/index.ts | 2 - .../src/react-window/shallowDiffers.ts | 15 - .../src/react-window/timer.ts | 32 - packages/react-log-viewer/tsconfig.cjs.json | 8 - packages/react-log-viewer/tsconfig.json | 23 - packages/react-topology/.npmignore | 2 - packages/react-topology/CHANGELOG.md | 11915 ---------------- packages/react-topology/README.md | 39 - packages/react-topology/package.json | 58 - packages/react-topology/src/Visualization.ts | 358 - .../src/__tests__/Visualization.spec.ts | 34 - .../src/anchors/AbstractAnchor.ts | 25 - .../src/anchors/CenterAnchor.ts | 14 - .../src/anchors/EllipseAnchor.ts | 15 - .../src/anchors/PolygonAnchor.ts | 70 - .../react-topology/src/anchors/RectAnchor.ts | 16 - .../react-topology/src/anchors/SVGAnchor.ts | 114 - .../anchors/__tests__/AbstractAnchor.spec.ts | 36 - .../anchors/__tests__/CenterAnchor.spec.ts | 25 - .../anchors/__tests__/EllipseAnchor.spec.ts | 38 - .../src/anchors/__tests__/RectAnchor.spec.ts | 29 - packages/react-topology/src/anchors/index.ts | 6 - .../react-topology/src/behavior/dnd-types.ts | 180 - packages/react-topology/src/behavior/index.ts | 15 - .../src/behavior/useAddBendpoint.tsx.bak | 58 - .../react-topology/src/behavior/useAnchor.tsx | 41 - .../src/behavior/useBendpoint.tsx | 102 - .../src/behavior/useDndDrag.tsx | 324 - .../src/behavior/useDndDrop.tsx | 195 - .../src/behavior/useDndManager.tsx | 358 - .../src/behavior/useDragNode.tsx | 178 - .../src/behavior/usePanZoom.tsx | 119 - .../src/behavior/usePolygonAnchor.tsx | 40 - .../src/behavior/useReconnect.tsx | 52 - .../src/behavior/useSelection.tsx | 92 - .../src/behavior/useSvgAnchor.tsx | 45 - .../src/behavior/withContextMenu.tsx | 55 - .../src/behavior/withCreateConnector.tsx | 278 - .../src/behavior/withRemoveConnector.tsx | 48 - .../components/ComputeElementDimensions.tsx | 32 - .../src/components/DefaultCreateConnector.tsx | 89 - .../src/components/DefaultRemoveConnector.tsx | 51 - .../src/components/ElementWrapper.tsx | 120 - .../src/components/GraphComponent.tsx | 69 - .../src/components/SVGArrowMarker.tsx | 34 - .../TopologyControlBar/TopologyControlBar.tsx | 304 - .../__tests__/TopologyControlBar.test.tsx | 50 - .../TopologyControlBar.test.tsx.snap | 342 - .../components/TopologyControlBar/index.ts | 1 - .../TopologySideBar/TopologySideBar.tsx | 71 - .../__tests__/TopologySideBar.test.tsx | 40 - .../src/components/TopologySideBar/index.ts | 1 - .../components/TopologyView/TopologyView.tsx | 132 - .../__tests__/TopologyView.test.tsx | 110 - .../__snapshots__/TopologyView.test.tsx.snap | 115 - .../TopologyView/examples/ItemDetails.js | 49 - .../TopologyView/examples/ProjectToolbar.js | 107 - .../TopologyView/examples/Topology.md | 155 - .../TopologyView/examples/ViewToolbar.js | 142 - .../examples/topology-example.css | 18 - .../src/components/TopologyView/index.ts | 1 - .../src/components/VisualizationProvider.tsx | 22 - .../src/components/VisualizationSurface.tsx | 72 - .../ComputeElementDimensions.test.tsx | 19 - .../components/contextmenu/ContextMenu.tsx | 59 - .../contextmenu/ContextSubMenuItem.tsx | 95 - .../src/components/contextmenu/index.ts | 5 - .../src/components/decorators/Decorator.tsx | 83 - .../src/components/decorators/index.ts | 1 - .../src/components/defs/Defs.tsx | 22 - .../src/components/defs/SVGDefs.tsx | 31 - .../src/components/defs/SVGDefsContext.ts | 10 - .../src/components/defs/SVGDefsProvider.tsx | 70 - .../src/components/defs/SVGDefsSetter.tsx | 23 - .../src/components/defs/__mocks__/SVGDefs.tsx | 9 - .../components/defs/__tests__/Defs.test.tsx | 14 - .../defs/__tests__/SVGDefs.spec.tsx | 57 - .../src/components/defs/index.ts | 2 - .../components/edges/DefaultConnectorTag.tsx | 74 - .../src/components/edges/DefaultEdge.tsx | 162 - .../src/components/edges/index.ts | 3 - .../edges/terminals/ConnectorArrow.tsx | 66 - .../edges/terminals/ConnectorArrowAlt.tsx | 35 - .../edges/terminals/ConnectorCircle.tsx | 49 - .../edges/terminals/ConnectorCross.tsx | 61 - .../edges/terminals/ConnectorSquare.tsx | 50 - .../terminals/DefaultConnectorTerminal.tsx | 65 - .../src/components/edges/terminals/index.ts | 7 - .../edges/terminals/terminalUtils.ts | 30 - .../factories/RegisterComponentFactory.tsx | 14 - .../factories/RegisterElementFactory.tsx | 14 - .../factories/RegisterLayoutFactory.tsx | 14 - .../factories/components/componentUtils.ts | 289 - .../components/factories/components/index.ts | 1 - .../src/components/factories/index.ts | 4 - .../components/groups/CollapsedGroupAnchor.ts | 25 - .../src/components/groups/DefaultGroup.tsx | 56 - .../groups/DefaultGroupCollapsed.tsx | 185 - .../groups/DefaultGroupExpanded.tsx | 216 - .../src/components/groups/index.ts | 2 - .../src/components/groups/types.ts | 12 - .../react-topology/src/components/index.ts | 18 - .../src/components/layers/Layer.tsx | 88 - .../src/components/layers/LayerContainer.tsx | 37 - .../src/components/layers/LayersContext.ts | 7 - .../src/components/layers/LayersProvider.tsx | 57 - .../src/components/layers/index.ts | 2 - .../src/components/nodes/DefaultNode.tsx | 319 - .../src/components/nodes/NodeShadows.tsx | 23 - .../src/components/nodes/index.ts | 4 - .../nodes/labels/LabelActionIcon.tsx | 59 - .../components/nodes/labels/LabelBadge.tsx | 71 - .../nodes/labels/LabelContextMenu.tsx | 32 - .../src/components/nodes/labels/LabelIcon.tsx | 47 - .../src/components/nodes/labels/NodeLabel.tsx | 299 - .../src/components/nodes/labels/index.ts | 5 - .../src/components/nodes/shapes/Ellipse.tsx | 31 - .../src/components/nodes/shapes/Hexagon.tsx | 13 - .../src/components/nodes/shapes/Octagon.tsx | 13 - .../src/components/nodes/shapes/Rectangle.tsx | 36 - .../src/components/nodes/shapes/Rhombus.tsx | 45 - .../components/nodes/shapes/SidedShape.tsx | 40 - .../src/components/nodes/shapes/Stadium.tsx | 30 - .../src/components/nodes/shapes/Trapezoid.tsx | 54 - .../src/components/nodes/shapes/index.ts | 9 - .../src/components/nodes/shapes/shapeUtils.ts | 162 - .../src/components/popper/Popper.tsx | 230 - .../src/components/popper/Portal.tsx | 25 - .../src/components/popper/index.ts | 1 - .../components/svg/SvgDropShadowFilter.tsx | 64 - packages/react-topology/src/const.ts | 10 - packages/react-topology/src/declarations.d.ts | 3 - .../react-topology/src/elements/BaseEdge.ts | 202 - .../src/elements/BaseElement.ts | 302 - .../react-topology/src/elements/BaseGraph.ts | 370 - .../react-topology/src/elements/BaseNode.ts | 401 - .../src/elements/__tests__/BaseGraph.spec.ts | 334 - .../src/elements/__tests__/BaseNode.spec.ts | 47 - .../__tests__/defaultElementFactory.spec.ts | 13 - .../src/elements/defaultElementFactory.ts | 19 - packages/react-topology/src/elements/index.ts | 5 - .../react-topology/src/geom/Dimensions.ts | 63 - packages/react-topology/src/geom/Point.ts | 58 - packages/react-topology/src/geom/Rect.ts | 151 - .../src/geom/__tests__/Dimensions.spec.ts | 75 - .../src/geom/__tests__/Point.spec.ts | 68 - .../src/geom/__tests__/Rect.spec.ts | 135 - packages/react-topology/src/geom/index.ts | 4 - packages/react-topology/src/geom/types.ts | 28 - packages/react-topology/src/hooks/index.ts | 9 - .../src/hooks/useComponentFactory.tsx | 13 - .../src/hooks/useDetailsLevel.tsx | 12 - .../src/hooks/useElementFactory.tsx | 13 - .../src/hooks/useEventListener.tsx | 15 - .../src/hooks/useLayoutFactory.tsx | 13 - .../react-topology/src/hooks/useModel.tsx | 13 - .../react-topology/src/hooks/useScaleNode.tsx | 50 - .../src/hooks/useVisualizationController.tsx | 7 - .../src/hooks/useVisualizationState.tsx | 40 - packages/react-topology/src/index.ts | 13 - .../react-topology/src/layouts/BaseLayout.ts | 484 - .../src/layouts/BreadthFirstGroup.ts | 3 - .../src/layouts/BreadthFirstLayout.ts | 123 - .../src/layouts/BreadthFirstLink.ts | 3 - .../src/layouts/BreadthFirstNode.ts | 8 - .../react-topology/src/layouts/ColaGroup.ts | 3 - .../src/layouts/ColaGroupsLayout.ts | 252 - .../src/layouts/ColaGroupsNode.ts | 58 - .../react-topology/src/layouts/ColaLayout.ts | 199 - .../react-topology/src/layouts/ColaLink.ts | 10 - .../react-topology/src/layouts/ColaNode.ts | 21 - .../src/layouts/ConcentricGroup.ts | 2 - .../src/layouts/ConcentricLayout.ts | 107 - .../src/layouts/ConcentricLink.ts | 3 - .../src/layouts/ConcentricNode.ts | 8 - .../react-topology/src/layouts/DagreGroup.ts | 2 - .../react-topology/src/layouts/DagreLayout.ts | 93 - .../react-topology/src/layouts/DagreLink.ts | 10 - .../react-topology/src/layouts/DagreNode.ts | 19 - .../react-topology/src/layouts/ForceLayout.ts | 46 - .../src/layouts/ForceSimulation.ts | 112 - .../react-topology/src/layouts/GridGroup.ts | 2 - .../react-topology/src/layouts/GridLayout.ts | 71 - .../react-topology/src/layouts/GridLink.ts | 3 - .../react-topology/src/layouts/GridNode.ts | 8 - .../react-topology/src/layouts/LayoutGroup.ts | 21 - .../react-topology/src/layouts/LayoutLink.ts | 26 - .../react-topology/src/layouts/LayoutNode.ts | 93 - .../src/layouts/LayoutOptions.ts | 11 - packages/react-topology/src/layouts/index.ts | 12 - packages/react-topology/src/mobx-exports.ts | 5 - .../anchors/TaskNodeSourceAnchor.ts | 27 - .../anchors/TaskNodeSourceAnchorSave.ts | 22 - .../anchors/TaskNodeTargetAnchor.ts | 21 - .../src/pipelines/components/anchors/index.ts | 2 - .../pipelines/components/edges/TaskEdge.tsx | 31 - .../pipelines/components/edges/WhenEdge.tsx | 9 - .../src/pipelines/components/edges/index.ts | 2 - .../components/groups/DefaultTaskGroup.tsx | 182 - .../src/pipelines/components/groups/index.ts | 1 - .../src/pipelines/components/index.ts | 4 - .../components/nodes/FinallyNode.tsx | 8 - .../pipelines/components/nodes/SpacerNode.tsx | 7 - .../pipelines/components/nodes/TaskBadge.tsx | 75 - .../pipelines/components/nodes/TaskNode.tsx | 446 - .../src/pipelines/components/nodes/index.ts | 5 - .../react-topology/src/pipelines/const.ts | 12 - .../pipelines/decorators/WhenDecorator.tsx | 79 - .../src/pipelines/decorators/index.ts | 1 - .../react-topology/src/pipelines/index.ts | 6 - .../pipelines/layouts/PipelineDagreLayout.ts | 32 - .../src/pipelines/layouts/index.ts | 1 - .../react-topology/src/pipelines/types.ts | 24 - .../src/pipelines/utils/StatusIcon.tsx | 52 - .../src/pipelines/utils/draw-utils.ts | 93 - .../src/pipelines/utils/index.ts | 3 - .../src/pipelines/utils/utils.ts | 203 - packages/react-topology/src/types.ts | 352 - .../src/utils/ControllerContext.ts | 6 - .../src/utils/ElementContext.ts | 6 - packages/react-topology/src/utils/Stateful.ts | 18 - .../src/utils/__tests__/svg-utils.spec.ts | 30 - .../react-topology/src/utils/anchor-utils.ts | 179 - .../src/utils/createAggregateEdges.ts | 94 - .../react-topology/src/utils/element-utils.ts | 122 - .../react-topology/src/utils/geom-utils.ts | 11 - .../src/utils/getNodeScaleTranslation.ts | 16 - packages/react-topology/src/utils/index.ts | 13 - .../react-topology/src/utils/style-utils.ts | 46 - .../react-topology/src/utils/svg-utils.ts | 142 - .../src/utils/truncate-middle.ts | 49 - .../src/utils/useCallbackRef.ts | 22 - .../src/utils/useCombineRefs.tsx | 18 - packages/react-topology/src/utils/useHover.ts | 80 - packages/react-topology/src/utils/useSize.ts | 26 - packages/react-topology/tsconfig.cjs.json | 8 - packages/react-topology/tsconfig.json | 20 - yarn.lock | 35 + 255 files changed, 35 insertions(+), 36495 deletions(-) delete mode 100644 packages/react-log-viewer/CHANGELOG.md delete mode 100644 packages/react-log-viewer/package.json delete mode 100644 packages/react-log-viewer/src/LogViewer/LogViewer.tsx delete mode 100644 packages/react-log-viewer/src/LogViewer/LogViewerContext.tsx delete mode 100644 packages/react-log-viewer/src/LogViewer/LogViewerRow.tsx delete mode 100644 packages/react-log-viewer/src/LogViewer/LogViewerSearch.tsx delete mode 100644 packages/react-log-viewer/src/LogViewer/demos/LogViewer.md delete mode 100644 packages/react-log-viewer/src/LogViewer/examples/LogViewer.md delete mode 100644 packages/react-log-viewer/src/LogViewer/examples/realTestData.js delete mode 100644 packages/react-log-viewer/src/LogViewer/index.ts delete mode 100644 packages/react-log-viewer/src/LogViewer/utils/constants.ts delete mode 100644 packages/react-log-viewer/src/LogViewer/utils/utils.tsx delete mode 100644 packages/react-log-viewer/src/ansi_up/ansi_up.ts delete mode 100644 packages/react-log-viewer/src/index.ts delete mode 100644 packages/react-log-viewer/src/react-window/VariableSizeList.tsx delete mode 100644 packages/react-log-viewer/src/react-window/areEqual.ts delete mode 100644 packages/react-log-viewer/src/react-window/createListComponent.ts delete mode 100644 packages/react-log-viewer/src/react-window/index.ts delete mode 100644 packages/react-log-viewer/src/react-window/shallowDiffers.ts delete mode 100644 packages/react-log-viewer/src/react-window/timer.ts delete mode 100644 packages/react-log-viewer/tsconfig.cjs.json delete mode 100644 packages/react-log-viewer/tsconfig.json delete mode 100644 packages/react-topology/.npmignore delete mode 100644 packages/react-topology/CHANGELOG.md delete mode 100644 packages/react-topology/README.md delete mode 100644 packages/react-topology/package.json delete mode 100644 packages/react-topology/src/Visualization.ts delete mode 100644 packages/react-topology/src/__tests__/Visualization.spec.ts delete mode 100644 packages/react-topology/src/anchors/AbstractAnchor.ts delete mode 100644 packages/react-topology/src/anchors/CenterAnchor.ts delete mode 100644 packages/react-topology/src/anchors/EllipseAnchor.ts delete mode 100644 packages/react-topology/src/anchors/PolygonAnchor.ts delete mode 100644 packages/react-topology/src/anchors/RectAnchor.ts delete mode 100644 packages/react-topology/src/anchors/SVGAnchor.ts delete mode 100644 packages/react-topology/src/anchors/__tests__/AbstractAnchor.spec.ts delete mode 100644 packages/react-topology/src/anchors/__tests__/CenterAnchor.spec.ts delete mode 100644 packages/react-topology/src/anchors/__tests__/EllipseAnchor.spec.ts delete mode 100644 packages/react-topology/src/anchors/__tests__/RectAnchor.spec.ts delete mode 100644 packages/react-topology/src/anchors/index.ts delete mode 100644 packages/react-topology/src/behavior/dnd-types.ts delete mode 100644 packages/react-topology/src/behavior/index.ts delete mode 100644 packages/react-topology/src/behavior/useAddBendpoint.tsx.bak delete mode 100644 packages/react-topology/src/behavior/useAnchor.tsx delete mode 100644 packages/react-topology/src/behavior/useBendpoint.tsx delete mode 100644 packages/react-topology/src/behavior/useDndDrag.tsx delete mode 100644 packages/react-topology/src/behavior/useDndDrop.tsx delete mode 100644 packages/react-topology/src/behavior/useDndManager.tsx delete mode 100644 packages/react-topology/src/behavior/useDragNode.tsx delete mode 100644 packages/react-topology/src/behavior/usePanZoom.tsx delete mode 100644 packages/react-topology/src/behavior/usePolygonAnchor.tsx delete mode 100644 packages/react-topology/src/behavior/useReconnect.tsx delete mode 100644 packages/react-topology/src/behavior/useSelection.tsx delete mode 100644 packages/react-topology/src/behavior/useSvgAnchor.tsx delete mode 100644 packages/react-topology/src/behavior/withContextMenu.tsx delete mode 100644 packages/react-topology/src/behavior/withCreateConnector.tsx delete mode 100644 packages/react-topology/src/behavior/withRemoveConnector.tsx delete mode 100644 packages/react-topology/src/components/ComputeElementDimensions.tsx delete mode 100644 packages/react-topology/src/components/DefaultCreateConnector.tsx delete mode 100644 packages/react-topology/src/components/DefaultRemoveConnector.tsx delete mode 100644 packages/react-topology/src/components/ElementWrapper.tsx delete mode 100644 packages/react-topology/src/components/GraphComponent.tsx delete mode 100644 packages/react-topology/src/components/SVGArrowMarker.tsx delete mode 100644 packages/react-topology/src/components/TopologyControlBar/TopologyControlBar.tsx delete mode 100644 packages/react-topology/src/components/TopologyControlBar/__tests__/TopologyControlBar.test.tsx delete mode 100644 packages/react-topology/src/components/TopologyControlBar/__tests__/__snapshots__/TopologyControlBar.test.tsx.snap delete mode 100644 packages/react-topology/src/components/TopologyControlBar/index.ts delete mode 100644 packages/react-topology/src/components/TopologySideBar/TopologySideBar.tsx delete mode 100644 packages/react-topology/src/components/TopologySideBar/__tests__/TopologySideBar.test.tsx delete mode 100644 packages/react-topology/src/components/TopologySideBar/index.ts delete mode 100644 packages/react-topology/src/components/TopologyView/TopologyView.tsx delete mode 100644 packages/react-topology/src/components/TopologyView/__tests__/TopologyView.test.tsx delete mode 100644 packages/react-topology/src/components/TopologyView/__tests__/__snapshots__/TopologyView.test.tsx.snap delete mode 100644 packages/react-topology/src/components/TopologyView/examples/ItemDetails.js delete mode 100644 packages/react-topology/src/components/TopologyView/examples/ProjectToolbar.js delete mode 100644 packages/react-topology/src/components/TopologyView/examples/Topology.md delete mode 100644 packages/react-topology/src/components/TopologyView/examples/ViewToolbar.js delete mode 100644 packages/react-topology/src/components/TopologyView/examples/topology-example.css delete mode 100644 packages/react-topology/src/components/TopologyView/index.ts delete mode 100644 packages/react-topology/src/components/VisualizationProvider.tsx delete mode 100644 packages/react-topology/src/components/VisualizationSurface.tsx delete mode 100644 packages/react-topology/src/components/__tests__/ComputeElementDimensions.test.tsx delete mode 100644 packages/react-topology/src/components/contextmenu/ContextMenu.tsx delete mode 100644 packages/react-topology/src/components/contextmenu/ContextSubMenuItem.tsx delete mode 100644 packages/react-topology/src/components/contextmenu/index.ts delete mode 100644 packages/react-topology/src/components/decorators/Decorator.tsx delete mode 100644 packages/react-topology/src/components/decorators/index.ts delete mode 100644 packages/react-topology/src/components/defs/Defs.tsx delete mode 100644 packages/react-topology/src/components/defs/SVGDefs.tsx delete mode 100644 packages/react-topology/src/components/defs/SVGDefsContext.ts delete mode 100644 packages/react-topology/src/components/defs/SVGDefsProvider.tsx delete mode 100644 packages/react-topology/src/components/defs/SVGDefsSetter.tsx delete mode 100644 packages/react-topology/src/components/defs/__mocks__/SVGDefs.tsx delete mode 100644 packages/react-topology/src/components/defs/__tests__/Defs.test.tsx delete mode 100644 packages/react-topology/src/components/defs/__tests__/SVGDefs.spec.tsx delete mode 100644 packages/react-topology/src/components/defs/index.ts delete mode 100644 packages/react-topology/src/components/edges/DefaultConnectorTag.tsx delete mode 100644 packages/react-topology/src/components/edges/DefaultEdge.tsx delete mode 100644 packages/react-topology/src/components/edges/index.ts delete mode 100644 packages/react-topology/src/components/edges/terminals/ConnectorArrow.tsx delete mode 100644 packages/react-topology/src/components/edges/terminals/ConnectorArrowAlt.tsx delete mode 100644 packages/react-topology/src/components/edges/terminals/ConnectorCircle.tsx delete mode 100644 packages/react-topology/src/components/edges/terminals/ConnectorCross.tsx delete mode 100644 packages/react-topology/src/components/edges/terminals/ConnectorSquare.tsx delete mode 100644 packages/react-topology/src/components/edges/terminals/DefaultConnectorTerminal.tsx delete mode 100644 packages/react-topology/src/components/edges/terminals/index.ts delete mode 100644 packages/react-topology/src/components/edges/terminals/terminalUtils.ts delete mode 100644 packages/react-topology/src/components/factories/RegisterComponentFactory.tsx delete mode 100644 packages/react-topology/src/components/factories/RegisterElementFactory.tsx delete mode 100644 packages/react-topology/src/components/factories/RegisterLayoutFactory.tsx delete mode 100644 packages/react-topology/src/components/factories/components/componentUtils.ts delete mode 100644 packages/react-topology/src/components/factories/components/index.ts delete mode 100644 packages/react-topology/src/components/factories/index.ts delete mode 100644 packages/react-topology/src/components/groups/CollapsedGroupAnchor.ts delete mode 100644 packages/react-topology/src/components/groups/DefaultGroup.tsx delete mode 100644 packages/react-topology/src/components/groups/DefaultGroupCollapsed.tsx delete mode 100644 packages/react-topology/src/components/groups/DefaultGroupExpanded.tsx delete mode 100644 packages/react-topology/src/components/groups/index.ts delete mode 100644 packages/react-topology/src/components/groups/types.ts delete mode 100644 packages/react-topology/src/components/index.ts delete mode 100644 packages/react-topology/src/components/layers/Layer.tsx delete mode 100644 packages/react-topology/src/components/layers/LayerContainer.tsx delete mode 100644 packages/react-topology/src/components/layers/LayersContext.ts delete mode 100644 packages/react-topology/src/components/layers/LayersProvider.tsx delete mode 100644 packages/react-topology/src/components/layers/index.ts delete mode 100644 packages/react-topology/src/components/nodes/DefaultNode.tsx delete mode 100644 packages/react-topology/src/components/nodes/NodeShadows.tsx delete mode 100644 packages/react-topology/src/components/nodes/index.ts delete mode 100644 packages/react-topology/src/components/nodes/labels/LabelActionIcon.tsx delete mode 100644 packages/react-topology/src/components/nodes/labels/LabelBadge.tsx delete mode 100644 packages/react-topology/src/components/nodes/labels/LabelContextMenu.tsx delete mode 100644 packages/react-topology/src/components/nodes/labels/LabelIcon.tsx delete mode 100644 packages/react-topology/src/components/nodes/labels/NodeLabel.tsx delete mode 100644 packages/react-topology/src/components/nodes/labels/index.ts delete mode 100644 packages/react-topology/src/components/nodes/shapes/Ellipse.tsx delete mode 100644 packages/react-topology/src/components/nodes/shapes/Hexagon.tsx delete mode 100644 packages/react-topology/src/components/nodes/shapes/Octagon.tsx delete mode 100644 packages/react-topology/src/components/nodes/shapes/Rectangle.tsx delete mode 100644 packages/react-topology/src/components/nodes/shapes/Rhombus.tsx delete mode 100644 packages/react-topology/src/components/nodes/shapes/SidedShape.tsx delete mode 100644 packages/react-topology/src/components/nodes/shapes/Stadium.tsx delete mode 100644 packages/react-topology/src/components/nodes/shapes/Trapezoid.tsx delete mode 100644 packages/react-topology/src/components/nodes/shapes/index.ts delete mode 100644 packages/react-topology/src/components/nodes/shapes/shapeUtils.ts delete mode 100644 packages/react-topology/src/components/popper/Popper.tsx delete mode 100644 packages/react-topology/src/components/popper/Portal.tsx delete mode 100644 packages/react-topology/src/components/popper/index.ts delete mode 100644 packages/react-topology/src/components/svg/SvgDropShadowFilter.tsx delete mode 100644 packages/react-topology/src/const.ts delete mode 100644 packages/react-topology/src/declarations.d.ts delete mode 100644 packages/react-topology/src/elements/BaseEdge.ts delete mode 100644 packages/react-topology/src/elements/BaseElement.ts delete mode 100644 packages/react-topology/src/elements/BaseGraph.ts delete mode 100644 packages/react-topology/src/elements/BaseNode.ts delete mode 100644 packages/react-topology/src/elements/__tests__/BaseGraph.spec.ts delete mode 100644 packages/react-topology/src/elements/__tests__/BaseNode.spec.ts delete mode 100644 packages/react-topology/src/elements/__tests__/defaultElementFactory.spec.ts delete mode 100644 packages/react-topology/src/elements/defaultElementFactory.ts delete mode 100644 packages/react-topology/src/elements/index.ts delete mode 100644 packages/react-topology/src/geom/Dimensions.ts delete mode 100644 packages/react-topology/src/geom/Point.ts delete mode 100644 packages/react-topology/src/geom/Rect.ts delete mode 100644 packages/react-topology/src/geom/__tests__/Dimensions.spec.ts delete mode 100644 packages/react-topology/src/geom/__tests__/Point.spec.ts delete mode 100644 packages/react-topology/src/geom/__tests__/Rect.spec.ts delete mode 100644 packages/react-topology/src/geom/index.ts delete mode 100644 packages/react-topology/src/geom/types.ts delete mode 100644 packages/react-topology/src/hooks/index.ts delete mode 100644 packages/react-topology/src/hooks/useComponentFactory.tsx delete mode 100644 packages/react-topology/src/hooks/useDetailsLevel.tsx delete mode 100644 packages/react-topology/src/hooks/useElementFactory.tsx delete mode 100644 packages/react-topology/src/hooks/useEventListener.tsx delete mode 100644 packages/react-topology/src/hooks/useLayoutFactory.tsx delete mode 100644 packages/react-topology/src/hooks/useModel.tsx delete mode 100644 packages/react-topology/src/hooks/useScaleNode.tsx delete mode 100644 packages/react-topology/src/hooks/useVisualizationController.tsx delete mode 100644 packages/react-topology/src/hooks/useVisualizationState.tsx delete mode 100644 packages/react-topology/src/index.ts delete mode 100644 packages/react-topology/src/layouts/BaseLayout.ts delete mode 100644 packages/react-topology/src/layouts/BreadthFirstGroup.ts delete mode 100644 packages/react-topology/src/layouts/BreadthFirstLayout.ts delete mode 100644 packages/react-topology/src/layouts/BreadthFirstLink.ts delete mode 100644 packages/react-topology/src/layouts/BreadthFirstNode.ts delete mode 100644 packages/react-topology/src/layouts/ColaGroup.ts delete mode 100644 packages/react-topology/src/layouts/ColaGroupsLayout.ts delete mode 100644 packages/react-topology/src/layouts/ColaGroupsNode.ts delete mode 100644 packages/react-topology/src/layouts/ColaLayout.ts delete mode 100644 packages/react-topology/src/layouts/ColaLink.ts delete mode 100644 packages/react-topology/src/layouts/ColaNode.ts delete mode 100644 packages/react-topology/src/layouts/ConcentricGroup.ts delete mode 100644 packages/react-topology/src/layouts/ConcentricLayout.ts delete mode 100644 packages/react-topology/src/layouts/ConcentricLink.ts delete mode 100644 packages/react-topology/src/layouts/ConcentricNode.ts delete mode 100644 packages/react-topology/src/layouts/DagreGroup.ts delete mode 100644 packages/react-topology/src/layouts/DagreLayout.ts delete mode 100644 packages/react-topology/src/layouts/DagreLink.ts delete mode 100644 packages/react-topology/src/layouts/DagreNode.ts delete mode 100644 packages/react-topology/src/layouts/ForceLayout.ts delete mode 100644 packages/react-topology/src/layouts/ForceSimulation.ts delete mode 100644 packages/react-topology/src/layouts/GridGroup.ts delete mode 100644 packages/react-topology/src/layouts/GridLayout.ts delete mode 100644 packages/react-topology/src/layouts/GridLink.ts delete mode 100644 packages/react-topology/src/layouts/GridNode.ts delete mode 100644 packages/react-topology/src/layouts/LayoutGroup.ts delete mode 100644 packages/react-topology/src/layouts/LayoutLink.ts delete mode 100644 packages/react-topology/src/layouts/LayoutNode.ts delete mode 100644 packages/react-topology/src/layouts/LayoutOptions.ts delete mode 100644 packages/react-topology/src/layouts/index.ts delete mode 100644 packages/react-topology/src/mobx-exports.ts delete mode 100644 packages/react-topology/src/pipelines/components/anchors/TaskNodeSourceAnchor.ts delete mode 100644 packages/react-topology/src/pipelines/components/anchors/TaskNodeSourceAnchorSave.ts delete mode 100644 packages/react-topology/src/pipelines/components/anchors/TaskNodeTargetAnchor.ts delete mode 100644 packages/react-topology/src/pipelines/components/anchors/index.ts delete mode 100644 packages/react-topology/src/pipelines/components/edges/TaskEdge.tsx delete mode 100644 packages/react-topology/src/pipelines/components/edges/WhenEdge.tsx delete mode 100644 packages/react-topology/src/pipelines/components/edges/index.ts delete mode 100644 packages/react-topology/src/pipelines/components/groups/DefaultTaskGroup.tsx delete mode 100644 packages/react-topology/src/pipelines/components/groups/index.ts delete mode 100644 packages/react-topology/src/pipelines/components/index.ts delete mode 100644 packages/react-topology/src/pipelines/components/nodes/FinallyNode.tsx delete mode 100644 packages/react-topology/src/pipelines/components/nodes/SpacerNode.tsx delete mode 100644 packages/react-topology/src/pipelines/components/nodes/TaskBadge.tsx delete mode 100644 packages/react-topology/src/pipelines/components/nodes/TaskNode.tsx delete mode 100644 packages/react-topology/src/pipelines/components/nodes/index.ts delete mode 100644 packages/react-topology/src/pipelines/const.ts delete mode 100644 packages/react-topology/src/pipelines/decorators/WhenDecorator.tsx delete mode 100644 packages/react-topology/src/pipelines/decorators/index.ts delete mode 100644 packages/react-topology/src/pipelines/index.ts delete mode 100644 packages/react-topology/src/pipelines/layouts/PipelineDagreLayout.ts delete mode 100644 packages/react-topology/src/pipelines/layouts/index.ts delete mode 100644 packages/react-topology/src/pipelines/types.ts delete mode 100644 packages/react-topology/src/pipelines/utils/StatusIcon.tsx delete mode 100644 packages/react-topology/src/pipelines/utils/draw-utils.ts delete mode 100644 packages/react-topology/src/pipelines/utils/index.ts delete mode 100644 packages/react-topology/src/pipelines/utils/utils.ts delete mode 100644 packages/react-topology/src/types.ts delete mode 100644 packages/react-topology/src/utils/ControllerContext.ts delete mode 100644 packages/react-topology/src/utils/ElementContext.ts delete mode 100644 packages/react-topology/src/utils/Stateful.ts delete mode 100644 packages/react-topology/src/utils/__tests__/svg-utils.spec.ts delete mode 100644 packages/react-topology/src/utils/anchor-utils.ts delete mode 100644 packages/react-topology/src/utils/createAggregateEdges.ts delete mode 100644 packages/react-topology/src/utils/element-utils.ts delete mode 100644 packages/react-topology/src/utils/geom-utils.ts delete mode 100644 packages/react-topology/src/utils/getNodeScaleTranslation.ts delete mode 100644 packages/react-topology/src/utils/index.ts delete mode 100644 packages/react-topology/src/utils/style-utils.ts delete mode 100644 packages/react-topology/src/utils/svg-utils.ts delete mode 100644 packages/react-topology/src/utils/truncate-middle.ts delete mode 100644 packages/react-topology/src/utils/useCallbackRef.ts delete mode 100644 packages/react-topology/src/utils/useCombineRefs.tsx delete mode 100644 packages/react-topology/src/utils/useHover.ts delete mode 100644 packages/react-topology/src/utils/useSize.ts delete mode 100644 packages/react-topology/tsconfig.cjs.json delete mode 100644 packages/react-topology/tsconfig.json diff --git a/packages/react-log-viewer/CHANGELOG.md b/packages/react-log-viewer/CHANGELOG.md deleted file mode 100644 index 1317b33df46..00000000000 --- a/packages/react-log-viewer/CHANGELOG.md +++ /dev/null @@ -1,6003 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [4.87.77](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.76...@patternfly/react-log-viewer@4.87.77) (2022-12-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.76](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.75...@patternfly/react-log-viewer@4.87.76) (2022-12-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.75](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.74...@patternfly/react-log-viewer@4.87.75) (2022-12-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.74](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.73...@patternfly/react-log-viewer@4.87.74) (2022-12-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.87.73 (2022-12-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.87.72 (2022-12-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.71](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.70...@patternfly/react-log-viewer@4.87.71) (2022-12-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.70](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.69...@patternfly/react-log-viewer@4.87.70) (2022-12-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.69](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.68...@patternfly/react-log-viewer@4.87.69) (2022-12-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.68](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.67...@patternfly/react-log-viewer@4.87.68) (2022-12-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.67](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.66...@patternfly/react-log-viewer@4.87.67) (2022-12-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.87.66 (2022-12-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.65](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.64...@patternfly/react-log-viewer@4.87.65) (2022-12-05) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.87.64 (2022-12-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.87.63 (2022-11-30) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.62](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.61...@patternfly/react-log-viewer@4.87.62) (2022-11-16) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.61](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.60...@patternfly/react-log-viewer@4.87.61) (2022-11-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.60](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.59...@patternfly/react-log-viewer@4.87.60) (2022-11-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.59](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.58...@patternfly/react-log-viewer@4.87.59) (2022-11-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.58](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.57...@patternfly/react-log-viewer@4.87.58) (2022-11-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.57](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.56...@patternfly/react-log-viewer@4.87.57) (2022-11-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.56](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.55...@patternfly/react-log-viewer@4.87.56) (2022-11-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.55](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.54...@patternfly/react-log-viewer@4.87.55) (2022-11-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.54](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.53...@patternfly/react-log-viewer@4.87.54) (2022-11-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.53](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.52...@patternfly/react-log-viewer@4.87.53) (2022-11-04) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.87.52 (2022-11-04) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.87.51 (2022-11-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.50](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.49...@patternfly/react-log-viewer@4.87.50) (2022-10-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.49](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.48...@patternfly/react-log-viewer@4.87.49) (2022-10-26) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.48](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.47...@patternfly/react-log-viewer@4.87.48) (2022-10-26) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.87.47 (2022-10-25) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.46](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.45...@patternfly/react-log-viewer@4.87.46) (2022-10-24) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.45](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.44...@patternfly/react-log-viewer@4.87.45) (2022-10-24) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.44](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.43...@patternfly/react-log-viewer@4.87.44) (2022-10-24) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.43](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.42...@patternfly/react-log-viewer@4.87.43) (2022-10-24) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.41...@patternfly/react-log-viewer@4.87.42) (2022-10-22) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.40...@patternfly/react-log-viewer@4.87.41) (2022-10-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.40](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.39...@patternfly/react-log-viewer@4.87.40) (2022-10-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.38...@patternfly/react-log-viewer@4.87.39) (2022-10-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.37...@patternfly/react-log-viewer@4.87.38) (2022-10-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.36...@patternfly/react-log-viewer@4.87.37) (2022-10-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.35...@patternfly/react-log-viewer@4.87.36) (2022-10-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.34...@patternfly/react-log-viewer@4.87.35) (2022-10-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.33...@patternfly/react-log-viewer@4.87.34) (2022-10-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.32...@patternfly/react-log-viewer@4.87.33) (2022-10-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.31...@patternfly/react-log-viewer@4.87.32) (2022-10-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.30...@patternfly/react-log-viewer@4.87.31) (2022-10-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.29...@patternfly/react-log-viewer@4.87.30) (2022-10-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.28...@patternfly/react-log-viewer@4.87.29) (2022-10-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.27...@patternfly/react-log-viewer@4.87.28) (2022-10-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.26...@patternfly/react-log-viewer@4.87.27) (2022-10-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.25...@patternfly/react-log-viewer@4.87.26) (2022-10-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.24...@patternfly/react-log-viewer@4.87.25) (2022-10-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.23...@patternfly/react-log-viewer@4.87.24) (2022-10-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.87.23 (2022-10-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.21...@patternfly/react-log-viewer@4.87.22) (2022-10-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.20...@patternfly/react-log-viewer@4.87.21) (2022-10-05) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.87.20 (2022-10-05) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.18...@patternfly/react-log-viewer@4.87.19) (2022-10-04) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.17...@patternfly/react-log-viewer@4.87.18) (2022-10-04) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.87.17 (2022-09-30) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.15...@patternfly/react-log-viewer@4.87.16) (2022-09-30) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.14...@patternfly/react-log-viewer@4.87.15) (2022-09-30) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.13...@patternfly/react-log-viewer@4.87.14) (2022-09-29) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.12...@patternfly/react-log-viewer@4.87.13) (2022-09-29) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.87.12 (2022-09-29) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.10...@patternfly/react-log-viewer@4.87.11) (2022-09-29) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.9...@patternfly/react-log-viewer@4.87.10) (2022-09-29) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.8...@patternfly/react-log-viewer@4.87.9) (2022-09-29) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.7...@patternfly/react-log-viewer@4.87.8) (2022-09-28) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.6...@patternfly/react-log-viewer@4.87.7) (2022-09-26) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.5...@patternfly/react-log-viewer@4.87.6) (2022-09-26) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.4...@patternfly/react-log-viewer@4.87.5) (2022-09-26) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.3...@patternfly/react-log-viewer@4.87.4) (2022-09-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.2...@patternfly/react-log-viewer@4.87.3) (2022-09-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.87.2 (2022-09-22) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.87.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.87.0...@patternfly/react-log-viewer@4.87.1) (2022-09-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# [4.87.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.86.5...@patternfly/react-log-viewer@4.87.0) (2022-09-21) - - -### Features - -* **log-viewer:** add prop initialIndexWidth to support for custom line number col size ([#7939](https://github.com/patternfly/patternfly-react/issues/7939)) ([71787ab](https://github.com/patternfly/patternfly-react/commit/71787abca8da00271e89edd86be7099b88cc974a)) - - - - - -## [4.86.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.86.4...@patternfly/react-log-viewer@4.86.5) (2022-09-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.86.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.86.3...@patternfly/react-log-viewer@4.86.4) (2022-09-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.86.3 (2022-09-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.86.2 (2022-09-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.86.1 (2022-09-20) - - -### Bug Fixes - -* **OverflowMenu:** store resize listener reference ([#7975](https://github.com/patternfly/patternfly-react/issues/7975)) ([86b0193](https://github.com/patternfly/patternfly-react/commit/86b01936a3029886173654925eb5d11d9077fc56)) - - - - - -# 4.86.0 (2022-09-19) - - -### Features - -* **Wizard - next:** supporting component unit tests ([#7731](https://github.com/patternfly/patternfly-react/issues/7731)) ([2e4ec26](https://github.com/patternfly/patternfly-react/commit/2e4ec26d428b6be0ca4254b29e03c889eb5625bb)) - - - - - -# 4.85.0 (2022-09-16) - - -### Features - -* **charts:** Update Victory dependencies ([#7986](https://github.com/patternfly/patternfly-react/issues/7986)) ([bbee15f](https://github.com/patternfly/patternfly-react/commit/bbee15fd0e00288dfa72c88a79a685b5405a355e)) - - - - - -## 4.84.1 (2022-09-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.84.0 (2022-09-14) - - -### Features - -* **Dropdown next:** Added the next version of the dropdown component ([#7955](https://github.com/patternfly/patternfly-react/issues/7955)) ([c092c7c](https://github.com/patternfly/patternfly-react/commit/c092c7cfaf877c5783c9ad9db0a8010b8ea023eb)) - - - - - -# 4.83.0 (2022-09-14) - - -### Features - -* **SearchInput:** new expandable button for masthead variant ([#7903](https://github.com/patternfly/patternfly-react/issues/7903)) ([d2a6c47](https://github.com/patternfly/patternfly-react/commit/d2a6c471ea3440d0b751b752b44ca1e8e749c5b6)) - - - - - -## 4.82.11 (2022-09-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.82.10 (2022-09-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.82.9 (2022-09-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.82.8 (2022-09-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.82.7 (2022-09-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.82.6 (2022-09-12) - - -### Bug Fixes - -* **Treeview:** ignore folder selection in basic example ([#7906](https://github.com/patternfly/patternfly-react/issues/7906)) ([b16b224](https://github.com/patternfly/patternfly-react/commit/b16b2240d26cabcadec3de52627fb1d96ff45aef)) - - - - - -## 4.82.5 (2022-09-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.82.4 (2022-09-09) - - -### Bug Fixes - -* **Modal, Dropdown, TreeView:** updates to resolve strict TS errors ([#7890](https://github.com/patternfly/patternfly-react/issues/7890)) ([011215b](https://github.com/patternfly/patternfly-react/commit/011215be95dfff1408e437c0b1062835669ff041)) - - - - - -## 4.82.3 (2022-09-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.82.2 (2022-09-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.82.1 (2022-09-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.82.0 (2022-09-09) - - -### Features - -* **Button:** new count number prop ([#7910](https://github.com/patternfly/patternfly-react/issues/7910)) ([a096b3c](https://github.com/patternfly/patternfly-react/commit/a096b3cba080b5bcd87777efe0e96e64c6da121f)) - - - - - -## 4.81.14 (2022-09-08) - - -### Bug Fixes - -* **Page:** Fixed page group props regression ([#7948](https://github.com/patternfly/patternfly-react/issues/7948)) ([044444e](https://github.com/patternfly/patternfly-react/commit/044444e11fb90d53dc8f783071d3e3dc517532a0)) - - - - - -## 4.81.13 (2022-09-08) - - -### Bug Fixes - -* **table:** fix bug in expandable demo ([#7945](https://github.com/patternfly/patternfly-react/issues/7945)) ([711b196](https://github.com/patternfly/patternfly-react/commit/711b19609dd8023b157a99f6988ff8618ccee35d)) - - - - - -## 4.81.12 (2022-09-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.81.11 (2022-09-07) - - -### Bug Fixes - -* **dashboardheader:** update brand image src to absolute import path for codesandbox functionality ([#7935](https://github.com/patternfly/patternfly-react/issues/7935)) ([6190a7f](https://github.com/patternfly/patternfly-react/commit/6190a7fd51a9606c9f1bf06aa0ebd46215fbd341)) - - - - - -## 4.81.10 (2022-09-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.81.9 (2022-09-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.81.8 (2022-09-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.81.7 (2022-09-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.81.6 (2022-09-06) - - -### Bug Fixes - -* **Page:** avoid unnecessary re-renders ([#7940](https://github.com/patternfly/patternfly-react/issues/7940)) ([3e23142](https://github.com/patternfly/patternfly-react/commit/3e23142c489ae5b77357345dbbeaa63cc175ea05)) - - - - - -## 4.81.5 (2022-09-02) - - -### Bug Fixes - -* **MenuToggle:** Fixed props not displaying in docs ([#7919](https://github.com/patternfly/patternfly-react/issues/7919)) ([8ca73e4](https://github.com/patternfly/patternfly-react/commit/8ca73e4dae9542646aff846511033bb7ae4fb2ef)) - - - - - -## 4.81.4 (2022-09-02) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.81.3 (2022-09-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.81.2 (2022-09-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.81.1 (2022-09-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.81.0 (2022-09-01) - - -### Features - -* **PageSection:** add ability to specify HTML element via prop ([#7891](https://github.com/patternfly/patternfly-react/issues/7891)) ([a9e20e4](https://github.com/patternfly/patternfly-react/commit/a9e20e4b6303fb673ed9222323a1114c3e68f8d6)) - - - - - -## 4.80.8 (2022-08-31) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.80.7 (2022-08-31) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.80.6 (2022-08-30) - - -### Bug Fixes - -* **NumberInput:** prevent errors when onChange is passed via inputProps ([#7908](https://github.com/patternfly/patternfly-react/issues/7908)) ([9cabeed](https://github.com/patternfly/patternfly-react/commit/9cabeedacf98bd80214a7f7fe1e40c3a15be4490)) - - - - - -## 4.80.5 (2022-08-29) - - -### Bug Fixes - -* **NumberInput:** manage null value ([#7898](https://github.com/patternfly/patternfly-react/issues/7898)) ([b86371d](https://github.com/patternfly/patternfly-react/commit/b86371dfe703614c12f49b68c096b28a91b9debd)) - - - - - -## 4.80.4 (2022-08-29) - - -### Bug Fixes - -* syntax errors on surge ([#7897](https://github.com/patternfly/patternfly-react/issues/7897)) ([a487abf](https://github.com/patternfly/patternfly-react/commit/a487abf770340555b2c5a451b5a5bfb0ea57fd45)) - - - - - -## 4.80.3 (2022-08-25) - - -### Bug Fixes - -* react-core should export all contents of dist directory ([#7883](https://github.com/patternfly/patternfly-react/issues/7883)) ([f5088d0](https://github.com/patternfly/patternfly-react/commit/f5088d069916d7c37335503251d13b4b846f3f62)) - - - - - -## 4.80.2 (2022-08-24) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.80.1 (2022-08-24) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.80.0 (2022-08-23) - - -### Features - -* **WizardComposable:** Created composable spinoff of wizard w/ enhancements ([#7703](https://github.com/patternfly/patternfly-react/issues/7703)) ([76eab29](https://github.com/patternfly/patternfly-react/commit/76eab29b640e2f71cd9bd5d42f58fa8dd0eba799)) - - - - - -## 4.79.4 (2022-08-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.79.3 (2022-08-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.79.2 (2022-08-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.79.1 (2022-08-22) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.79.0 (2022-08-22) - - -### Features - -* **Timestamp:** create component ([#7815](https://github.com/patternfly/patternfly-react/issues/7815)) ([98058b3](https://github.com/patternfly/patternfly-react/commit/98058b35c4b7d5e916abd7318e020e53783f73a6)) - - - - - -## 4.78.1 (2022-08-22) - - -### Bug Fixes - -* **TimePicker:** clean up menuAppendTo feature ([#7865](https://github.com/patternfly/patternfly-react/issues/7865)) ([3aa73be](https://github.com/patternfly/patternfly-react/commit/3aa73beb4581c1695aa3c3886291d862bd82286e)) - - - - - -# 4.78.0 (2022-08-19) - - -### Features - -* **ExpandableSection:** add truncated variant ([#7852](https://github.com/patternfly/patternfly-react/issues/7852)) ([f628cdf](https://github.com/patternfly/patternfly-react/commit/f628cdf571d71addfc04e69728be73895e261094)) - - - - - -## 4.77.13 (2022-08-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.77.12 (2022-08-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.77.11 (2022-08-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.77.10 (2022-08-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.77.9 (2022-08-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.77.8 (2022-08-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.77.7 (2022-08-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.77.6 (2022-08-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.77.5 (2022-08-17) - - -### Bug Fixes - -* **charts:** add victory-cursor-container dependency ([#7803](https://github.com/patternfly/patternfly-react/issues/7803)) ([6f1f00d](https://github.com/patternfly/patternfly-react/commit/6f1f00d0d60d9f841a3204e9378ac93a4333c41b)) - - - - - -## 4.77.4 (2022-08-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.77.3 (2022-08-16) - - -### Bug Fixes - -* **Select:** apply aria-describedby to correct element ([#7790](https://github.com/patternfly/patternfly-react/issues/7790)) ([1795ff5](https://github.com/patternfly/patternfly-react/commit/1795ff5a939cfab5af03f11640737377b7c39441)) - - - - - -## 4.77.2 (2022-08-16) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.77.1 (2022-08-16) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.77.0 (2022-08-16) - - -### Features - -* Allow for 'next' and 'deprecated' react-core subpaths ([#7824](https://github.com/patternfly/patternfly-react/issues/7824)) ([0e68bd3](https://github.com/patternfly/patternfly-react/commit/0e68bd349e9a8b4b08bb8b777358dcde41d5462f)) - - - - - -## 4.76.9 (2022-08-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.76.8 (2022-08-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.76.7 (2022-08-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.76.6 (2022-08-10) - - -### Reverts - -* Revert "feat(VisualizationSurface): replace react-measure with react-resize-detector (#7706)" (#7809) ([3c9cd8f](https://github.com/patternfly/patternfly-react/commit/3c9cd8f32d621f30aef0a4d4e0aa892b08354e7b)), closes [#7706](https://github.com/patternfly/patternfly-react/issues/7706) [#7809](https://github.com/patternfly/patternfly-react/issues/7809) - - - - - -## 4.76.5 (2022-08-05) - - -### Bug Fixes - -* **MenuToggle:** update base type to include div attributes as well ([#7798](https://github.com/patternfly/patternfly-react/issues/7798)) ([330e496](https://github.com/patternfly/patternfly-react/commit/330e496a7f1fb715ab06a6f6d118f1db8705828a)) - - - - - -## 4.76.4 (2022-08-05) - - -### Bug Fixes - -* **MenuToggle:** undo type change causing errors ([#7797](https://github.com/patternfly/patternfly-react/issues/7797)) ([1031ecb](https://github.com/patternfly/patternfly-react/commit/1031ecbeb5b4fa7eb28ed9c035454c7b408b8da8)) - - - - - -## 4.76.3 (2022-08-04) - - -### Bug Fixes - -* **charts:** remove uniqueId generation for labels and axis ticks ([#7794](https://github.com/patternfly/patternfly-react/issues/7794)) ([9c44131](https://github.com/patternfly/patternfly-react/commit/9c4413119f14e3e45a1ed12bd870120e278ebc20)) - - - - - -## 4.76.2 (2022-08-03) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.76.1 (2022-08-03) - - -### Bug Fixes - -* **Menu:** can navigate via keyboard for checkbox variant ([#7743](https://github.com/patternfly/patternfly-react/issues/7743)) ([7cfa876](https://github.com/patternfly/patternfly-react/commit/7cfa87682c225c3e93d6c4e0925b3c34aaede633)) - - - - - -# 4.76.0 (2022-08-03) - - -### Features - -* **MenuToggle:** add split button variants ([#7748](https://github.com/patternfly/patternfly-react/issues/7748)) ([7577725](https://github.com/patternfly/patternfly-react/commit/7577725305533791481ac22d9b36b87d5d3167b1)) - - - - - -## 4.75.1 (2022-08-02) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.75.0 (2022-08-01) - - -### Features - -* **Page:** add support for vertical breakpoints, add sticky breadcrumb demo ([#7764](https://github.com/patternfly/patternfly-react/issues/7764)) ([9db582d](https://github.com/patternfly/patternfly-react/commit/9db582d63a3499fa78ea8fab3ce31b7877cd479d)) - - - - - -# 4.74.0 (2022-08-01) - - -### Features - -* **DescriptionList:** add Display and Card variants ([#7713](https://github.com/patternfly/patternfly-react/issues/7713)) ([8c6e6d8](https://github.com/patternfly/patternfly-react/commit/8c6e6d83cdbe989d306c64f945aac206eac3ff91)) - - - - - -## 4.73.1 (2022-08-01) - - -### Bug Fixes - -* **Menu/Nav:** flyout variants work with VO navigation ([#7772](https://github.com/patternfly/patternfly-react/issues/7772)) ([6ad76cc](https://github.com/patternfly/patternfly-react/commit/6ad76cc1b466e8e93773f58002acf5ca54ad6e36)) - - - - - -# 4.73.0 (2022-07-29) - - -### Features - -* **Tabs:** add horizontal overflow option ([#7742](https://github.com/patternfly/patternfly-react/issues/7742)) ([2745cd1](https://github.com/patternfly/patternfly-react/commit/2745cd199669b0c0a5cdbd5c3d4e7453c6e1c435)) - - - - - -## 4.72.9 (2022-07-28) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.72.8 (2022-07-28) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.72.7 (2022-07-28) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.72.6 (2022-07-28) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.72.5 (2022-07-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.72.4 (2022-07-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.72.3 (2022-07-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.72.2 (2022-07-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.72.1 (2022-07-26) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.72.0 (2022-07-26) - - -### Features - -* **Dropdown:** added secondary styling to split action button ([#7746](https://github.com/patternfly/patternfly-react/issues/7746)) ([e701c32](https://github.com/patternfly/patternfly-react/commit/e701c32bb36097770ecb2c3e17e15df0b720488f)) - - - - - -## 4.71.2 (2022-07-26) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.71.1 (2022-07-26) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.71.0 (2022-07-26) - - -### Features - -* **topology:** Pipelines support for badges/icons variable task node width ([#7697](https://github.com/patternfly/patternfly-react/issues/7697)) ([a499273](https://github.com/patternfly/patternfly-react/commit/a49927315cd61e84a007d05b49e5d7254b977fcb)) - - - - - -## 4.70.11 (2022-07-25) - - -### Bug Fixes - -* **Select:** remove variant check from update logic ([#7741](https://github.com/patternfly/patternfly-react/issues/7741)) ([2204cb6](https://github.com/patternfly/patternfly-react/commit/2204cb62e30b4a37b82731f1380e79a3085828ef)) - - - - - -## 4.70.10 (2022-07-25) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.70.9 (2022-07-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.70.8 (2022-07-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.70.7 (2022-07-20) - - -### Bug Fixes - -* **Switch:** aria labelledby to update with change ([#7557](https://github.com/patternfly/patternfly-react/issues/7557)) ([9647a0c](https://github.com/patternfly/patternfly-react/commit/9647a0c7f7eb2174f006774b4406408bd065fddc)) - - - - - -## 4.70.6 (2022-07-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.70.5 (2022-07-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.70.4 (2022-07-15) - - -### Bug Fixes - -* **LogViewer:** render correctly when there is '\n' in the string array ([#7681](https://github.com/patternfly/patternfly-react/issues/7681)) ([12222c7](https://github.com/patternfly/patternfly-react/commit/12222c76d47396d8df5134c607a9ff689d6d93c9)) - - - - - -## 4.70.3 (2022-07-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.70.2 (2022-07-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.70.1 (2022-07-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.70.0 (2022-07-14) - - -### Features - -* **Topology:** Add Topology pipeline support ([#7609](https://github.com/patternfly/patternfly-react/issues/7609)) ([4fb563f](https://github.com/patternfly/patternfly-react/commit/4fb563fb8651c0386f7cc59fd9c736af6fb683ec)) - - - - - -## 4.69.15 (2022-07-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.14 (2022-07-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.13 (2022-07-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.12 (2022-07-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.11 (2022-07-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.10 (2022-07-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.9 (2022-07-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.8 (2022-07-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.7 (2022-07-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.6 (2022-07-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.5 (2022-07-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.4 (2022-07-05) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.3 (2022-07-05) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.2 (2022-06-30) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.69.1 (2022-06-29) - - -### Bug Fixes - -* **Select:** update logic should only apply to typeahead ([#7632](https://github.com/patternfly/patternfly-react/issues/7632)) ([0b9148e](https://github.com/patternfly/patternfly-react/commit/0b9148e67030236e61423895c6632b20dac4617f)) - - - - - -# 4.69.0 (2022-06-27) - - -### Features - -* **wizard:** add support for additional information panel (drawer) ([#7323](https://github.com/patternfly/patternfly-react/issues/7323)) ([6702504](https://github.com/patternfly/patternfly-react/commit/67025047d7bb644497f4477b77dbbdebe8ce97da)) - - - - - -## 4.68.3 (2022-06-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.68.2 (2022-06-23) - - -### Bug Fixes - -* **ProgressStepper:** added onTriggerEnter prop to Popover ([#7532](https://github.com/patternfly/patternfly-react/issues/7532)) ([1208390](https://github.com/patternfly/patternfly-react/commit/12083908a7043c017a5b7a97f84623add10bfe75)) - - - - - -## 4.68.1 (2022-06-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.68.0 (2022-06-22) - - -### Features - -* **Table:** add nested sticky header support ([#7595](https://github.com/patternfly/patternfly-react/issues/7595)) ([3888a0b](https://github.com/patternfly/patternfly-react/commit/3888a0bdf5e4e964d2d8d936c5d81f7813d8ec0c)) - - - - - -## 4.67.17 (2022-06-22) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.67.16 (2022-06-22) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.67.15 (2022-06-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.67.14 (2022-06-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.67.13 (2022-06-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.67.12 (2022-06-17) - - -### Bug Fixes - -* **Table:** account for added columns with expandable ([#7529](https://github.com/patternfly/patternfly-react/issues/7529)) ([dcde7c9](https://github.com/patternfly/patternfly-react/commit/dcde7c95eb7200b706da4d41a46f3f57b5129e40)) - - - - - -## 4.67.11 (2022-06-17) - - -### Bug Fixes - -* **Table:** update expandable examples to set column widths ([#7513](https://github.com/patternfly/patternfly-react/issues/7513)) ([c2e1e61](https://github.com/patternfly/patternfly-react/commit/c2e1e618a6924bdbb2b1e8e7ad94553615196fb2)) - - - - - -## 4.67.10 (2022-06-16) - - -### Bug Fixes - -* **Topology:** Fix for group position when it has no children ([#7573](https://github.com/patternfly/patternfly-react/issues/7573)) ([04e435e](https://github.com/patternfly/patternfly-react/commit/04e435ebc87ad7d1c687db95ee8ef8beffae514d)) - - - - - -## 4.67.9 (2022-06-16) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.67.8 (2022-06-16) - - -### Bug Fixes - -* **Table:** filterable table demo icon text spacing fix ([#7477](https://github.com/patternfly/patternfly-react/issues/7477)) ([e35387f](https://github.com/patternfly/patternfly-react/commit/e35387f42b355000ff66a79e1031eb6e9a7bb8c3)) - - - - - -## 4.67.7 (2022-06-16) - - -### Bug Fixes - -* **console:** add SUSE instruction for virt-viewer ([#7445](https://github.com/patternfly/patternfly-react/issues/7445)) ([2ac5adb](https://github.com/patternfly/patternfly-react/commit/2ac5adb581d673e0687f438baeb7859125bd30d4)), closes [#7519](https://github.com/patternfly/patternfly-react/issues/7519) - - - - - -## 4.67.6 (2022-06-16) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.67.5 (2022-06-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.67.4 (2022-06-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.67.3 (2022-06-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.67.2 (2022-06-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.67.1 (2022-06-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.67.0 (2022-06-14) - - -### Features - -* **Form:** add functionality for form group roles ([#7516](https://github.com/patternfly/patternfly-react/issues/7516)) ([4ff2f54](https://github.com/patternfly/patternfly-react/commit/4ff2f54ce21363e9c40c47517f20b8fc5e0cb401)) - - - - - -## 4.66.17 (2022-06-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.16 (2022-06-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.15 (2022-06-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.14 (2022-06-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.13 (2022-06-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.12 (2022-06-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.11 (2022-06-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.10 (2022-06-09) - - -### Bug Fixes - -* **Select:** retain focus on correct checkbox after view more ([#7505](https://github.com/patternfly/patternfly-react/issues/7505)) ([c9de16b](https://github.com/patternfly/patternfly-react/commit/c9de16b00a3573f74847b3953c7b408cf000fb85)) - - - - - -## 4.66.9 (2022-06-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.8 (2022-06-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.7 (2022-06-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.6 (2022-06-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.5 (2022-06-03) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.4 (2022-06-03) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.3 (2022-06-02) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.2 (2022-06-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.66.1 (2022-06-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.66.0 (2022-06-01) - - -### Features - -* **table:** full screen demo for sticky first column ([#7451](https://github.com/patternfly/patternfly-react/issues/7451)) ([f610dd4](https://github.com/patternfly/patternfly-react/commit/f610dd4726b16d73a166f7a57da0fa3588b8201d)) - - - - - -## 4.65.2 (2022-05-31) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.65.1 (2022-05-31) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.65.0 (2022-05-31) - - -### Features - -* **table:** add fullscreen demo for error state ([#7443](https://github.com/patternfly/patternfly-react/issues/7443)) ([eeab219](https://github.com/patternfly/patternfly-react/commit/eeab2197765589262ee7c328e57dbf1606da6d7f)) - - - - - -## 4.64.2 (2022-05-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.64.1 (2022-05-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.64.0 (2022-05-26) - - -### Features - -* **Popper:** add mouse events for popper content ([#7399](https://github.com/patternfly/patternfly-react/issues/7399)) ([47f8d12](https://github.com/patternfly/patternfly-react/commit/47f8d12e348397336287c7e7efc79665bce61ae2)) - - - - - -# 4.63.0 (2022-05-26) - - -### Features - -* **table:** add fullscreen empty state demo ([#7371](https://github.com/patternfly/patternfly-react/issues/7371)) ([54f3052](https://github.com/patternfly/patternfly-react/commit/54f30520d9d808ffe15c962b37af91cef4c21dcb)) - - - - - -## 4.62.4 (2022-05-26) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.62.3 (2022-05-26) - - -### Bug Fixes - -* **Select:** popper menu flips correctly ([#7434](https://github.com/patternfly/patternfly-react/issues/7434)) ([cc1eb21](https://github.com/patternfly/patternfly-react/commit/cc1eb2152246d03600a9fbbf678fd8b39f703347)) - - - - - -## 4.62.2 (2022-05-25) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.62.1 (2022-05-24) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.62.0 (2022-05-24) - - -### Features - -* **table:** add fullscreen loading state demo ([#7370](https://github.com/patternfly/patternfly-react/issues/7370)) ([285b5b7](https://github.com/patternfly/patternfly-react/commit/285b5b76cb6bb64d5fd4bd66cfb26f709457b3bc)) - - - - - -## 4.61.1 (2022-05-23) - - -### Bug Fixes - -* **Select:** allow enter to create when there is a single option ([#7444](https://github.com/patternfly/patternfly-react/issues/7444)) ([e1ae6a9](https://github.com/patternfly/patternfly-react/commit/e1ae6a9aa7dee0f8107905ec1d47463fce950ff3)) - - - - - -# 4.61.0 (2022-05-19) - - -### Features - -* **table:** update sortable demo to align with core ([#7292](https://github.com/patternfly/patternfly-react/issues/7292)) ([6891764](https://github.com/patternfly/patternfly-react/commit/6891764f2507c775005878f6e74cc5c8e44a6c68)) - - - - - -# 4.60.0 (2022-05-19) - - -### Features - -* **Menu:** Added support for checkbox menu ([#7368](https://github.com/patternfly/patternfly-react/issues/7368)) ([8c2d1dc](https://github.com/patternfly/patternfly-react/commit/8c2d1dc23dbe5c28a8c1ecf79eb34ea911da386f)) - - - - - -## 4.59.5 (2022-05-18) - - -### Bug Fixes - -* **Slider:** add support for aria-labelledby ad aria-describedby ([#7408](https://github.com/patternfly/patternfly-react/issues/7408)) ([7c8617a](https://github.com/patternfly/patternfly-react/commit/7c8617a1268a03061d51454b298c79ae5f7a59b0)) - - - - - -## 4.59.4 (2022-05-18) - - -### Bug Fixes - -* **Table:** Removed duplicate import from md file ([#7442](https://github.com/patternfly/patternfly-react/issues/7442)) ([00438a7](https://github.com/patternfly/patternfly-react/commit/00438a73c7b2548c4f0ad00ed09f9c60f99978d9)) - - - - - -## 4.59.3 (2022-05-16) - - -### Bug Fixes - -* **Chip:** add custom maxWidth prop ([#7387](https://github.com/patternfly/patternfly-react/issues/7387)) ([7cfb1a2](https://github.com/patternfly/patternfly-react/commit/7cfb1a202c2f1405c454b2e10716d9a500d4508f)) - - - - - -## 4.59.2 (2022-05-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.59.1 (2022-05-12) - - -### Bug Fixes - -* **Tabs:** make close handler optional ([#7405](https://github.com/patternfly/patternfly-react/issues/7405)) ([a84bb2a](https://github.com/patternfly/patternfly-react/commit/a84bb2aadefd7f811745b9512a26eda85241361d)) - - - - - -# 4.59.0 (2022-05-12) - - -### Features - -* **table:** expandable table demo ([#7277](https://github.com/patternfly/patternfly-react/issues/7277)) ([c081a61](https://github.com/patternfly/patternfly-react/commit/c081a61f11ceeb92688798106962e3604c243606)) - - - - - -## 4.58.6 (2022-05-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.58.5 (2022-05-11) - - -### Bug Fixes - -* **charts:** support customizing tooltip border for dark theme ([#7393](https://github.com/patternfly/patternfly-react/issues/7393)) ([7168a1d](https://github.com/patternfly/patternfly-react/commit/7168a1dc7f3a1302d719a32bcd32dcdb9ad8fb86)) - - - - - -## 4.58.4 (2022-05-11) - - -### Bug Fixes - -* **topology:** fix variables ([#7364](https://github.com/patternfly/patternfly-react/issues/7364)) ([2dec22e](https://github.com/patternfly/patternfly-react/commit/2dec22eec0f2fb8a634108e6995f747f61fa7d93)) - - - - - -## 4.58.3 (2022-05-10) - - -### Bug Fixes - -* **Card:** indicate card selectivity and status if using a screen reader ([#7144](https://github.com/patternfly/patternfly-react/issues/7144)) ([56fab43](https://github.com/patternfly/patternfly-react/commit/56fab43f801390d995ae9d0c3bdec3aa0f0d2cfb)) - - - - - -## 4.58.2 (2022-05-10) - - -### Reverts - -* Revert "docs(Dropdown): expose menuAppendTo in Dropdown prop docs (#7173)" (#7395) ([9e80f18](https://github.com/patternfly/patternfly-react/commit/9e80f1812773e269782cdb26928778e558ec5354)), closes [#7173](https://github.com/patternfly/patternfly-react/issues/7173) [#7395](https://github.com/patternfly/patternfly-react/issues/7395) - - - - - -## 4.58.1 (2022-05-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.58.0 (2022-05-10) - - -### Features - -* **Tabs:** allow dynamic close/add ([#7297](https://github.com/patternfly/patternfly-react/issues/7297)) ([51dd66c](https://github.com/patternfly/patternfly-react/commit/51dd66c59d25f96686c57de9fffe590f1c8cbe83)) - - - - - -# 4.57.0 (2022-05-09) - - -### Features - -* **charts:** added PF dark theme support ([#7310](https://github.com/patternfly/patternfly-react/issues/7310)) ([549c041](https://github.com/patternfly/patternfly-react/commit/549c041525b22d910b71a1c4f64e2cb0ba11ca8f)) - - - - - -## 4.56.6 (2022-05-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.56.5 (2022-05-09) - - -### Bug Fixes - -* **Popper:** update Popper modifiers when child DOM changes ([#7385](https://github.com/patternfly/patternfly-react/issues/7385)) ([28d0b74](https://github.com/patternfly/patternfly-react/commit/28d0b74107ae76acae535c37ea73cec3a4cf49d5)) - - - - - -## 4.56.4 (2022-05-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.56.3 (2022-05-06) - - -### Bug Fixes - -* **LogViewer:** clear ANSI cache when resetting the log window ([#7355](https://github.com/patternfly/patternfly-react/issues/7355)) ([b3354b5](https://github.com/patternfly/patternfly-react/commit/b3354b5000c5d7397c479888140b0381367cbd2c)) - - - - - -## 4.56.2 (2022-05-06) - - -### Bug Fixes - -* **Page:** add tabindex to components with hasOverflowScroll ([#7274](https://github.com/patternfly/patternfly-react/issues/7274)) ([6be2fa8](https://github.com/patternfly/patternfly-react/commit/6be2fa870aba78b833c7346ffe029f96cfc1c37d)) - - - - - -## 4.56.1 (2022-05-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.56.0 (2022-05-06) - - -### Features - -* **tokens:** Variables now include a fallback value for charts ([#7374](https://github.com/patternfly/patternfly-react/issues/7374)) ([6832688](https://github.com/patternfly/patternfly-react/commit/6832688d904159eee64510656dc4df6ed1ecb841)) - - - - - -# 4.55.0 (2022-05-05) - - -### Features - -* **charts:** Deprecate themeVariant prop for light / dark themes ([#7372](https://github.com/patternfly/patternfly-react/issues/7372)) ([362902a](https://github.com/patternfly/patternfly-react/commit/362902a72eb2b18e634423c86dea1bef89bf00e9)) - - - - - -# 4.54.0 (2022-05-05) - - -### Features - -* **drawer:** convert examples to TS ([#7329](https://github.com/patternfly/patternfly-react/issues/7329)) ([e3c6dfa](https://github.com/patternfly/patternfly-react/commit/e3c6dfa735a01c2be5a62eed8e37ad7a29b113de)) - - - - - -## 4.53.13 (2022-05-05) - - -### Bug Fixes - -* **Wixard:** Fixed id not being applied to wizard step ([#7349](https://github.com/patternfly/patternfly-react/issues/7349)) ([de6b557](https://github.com/patternfly/patternfly-react/commit/de6b557331460dd387faa1ac4c5c033757412340)) - - - - - -## 4.53.12 (2022-05-05) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.53.11 (2022-05-05) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.53.10 (2022-05-05) - - -### Bug Fixes - -* **charts:** Add style for tooltip cursor ([#7361](https://github.com/patternfly/patternfly-react/issues/7361)) ([1b3f67c](https://github.com/patternfly/patternfly-react/commit/1b3f67c3712a194bef672fe888f6a446f4bd8bc6)) - - - - - -## 4.53.9 (2022-05-04) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.53.8 (2022-05-04) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.53.7 (2022-05-04) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.53.6 (2022-05-03) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.53.5 (2022-05-03) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.53.4 (2022-05-03) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.53.3 (2022-05-03) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.53.2 (2022-05-03) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.53.1 (2022-05-03) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.53.0 (2022-05-02) - - -### Features - -* **divider:** add support for switching orientation at various breakpoints ([#7285](https://github.com/patternfly/patternfly-react/issues/7285)) ([6e47917](https://github.com/patternfly/patternfly-react/commit/6e47917a59fdbd0f9f647998d79d024a691a49e2)) - - - - - -# 4.52.0 (2022-04-28) - - -### Features - -* **CodeBlock:** add class to code component ([#7281](https://github.com/patternfly/patternfly-react/issues/7281)) ([844e162](https://github.com/patternfly/patternfly-react/commit/844e1621bc695c97f911f5cc64998c5d36911a4d)) - - - - - -## 4.51.6 (2022-04-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.51.5 (2022-04-26) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.51.4 (2022-04-25) - - -### Bug Fixes - -* **DateTimePicker:** update date placeholder ([#7266](https://github.com/patternfly/patternfly-react/issues/7266)) ([4e9a73e](https://github.com/patternfly/patternfly-react/commit/4e9a73e8f7645b7a885d15754f99b9e078449806)) - - - - - -## 4.51.3 (2022-04-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.51.2 (2022-04-21) - - -### Bug Fixes - -* **DataListCheck:** revert checked prop ([#7284](https://github.com/patternfly/patternfly-react/issues/7284)) ([d9889fc](https://github.com/patternfly/patternfly-react/commit/d9889fc86f224533f81457f384954e6a299c5677)) - - - - - -## 4.51.1 (2022-04-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.51.0 (2022-04-19) - - -### Features - -* **HelperText:** add react demos ([#7250](https://github.com/patternfly/patternfly-react/issues/7250)) ([bf68976](https://github.com/patternfly/patternfly-react/commit/bf68976bebd683c935f587795a868c32ea8c5616)) - - - - - -## 4.50.1 (2022-04-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.50.0 (2022-04-18) - - -### Features - -* **Tabs:** Add nested, unindented demo ([#7194](https://github.com/patternfly/patternfly-react/issues/7194)) ([81bd759](https://github.com/patternfly/patternfly-react/commit/81bd759189379bc558871acc791a1a34dcc2ed1a)) - - - - - -# 4.49.0 (2022-04-18) - - -### Features - -* **Progress stepper:** Updated to use render prop for popover ([#7190](https://github.com/patternfly/patternfly-react/issues/7190)) ([5eb8243](https://github.com/patternfly/patternfly-react/commit/5eb8243d63d1168d9b425a5322c08e04659ed843)) - - - - - -## 4.48.2 (2022-04-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.48.1 (2022-04-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.48.0 (2022-04-14) - - -### Features - -* **MenuToggle:** Add full width modifier ([#7232](https://github.com/patternfly/patternfly-react/issues/7232)) ([789a8a3](https://github.com/patternfly/patternfly-react/commit/789a8a3f1cb1f1d90565f8d0e6c0dbe984c0c66b)) - - - - - -## 4.47.37 (2022-04-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.36 (2022-04-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.35 (2022-04-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.34 (2022-04-13) - - -### Bug Fixes - -* **ContextSelector:** fix listener handling when using popper ([#7165](https://github.com/patternfly/patternfly-react/issues/7165)) ([af89d6a](https://github.com/patternfly/patternfly-react/commit/af89d6a334d0052205473d313ea5be0e64f3847c)) - - - - - -## 4.47.33 (2022-04-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.32 (2022-04-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.31 (2022-04-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.30 (2022-04-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.29 (2022-04-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.28 (2022-04-12) - - -### Bug Fixes - -* **demo-app:** reorder css imports to load in dark theme correctly ([#7224](https://github.com/patternfly/patternfly-react/issues/7224)) ([1341c93](https://github.com/patternfly/patternfly-react/commit/1341c9396a25f6850bf4e961e40c9ddd182d9d3b)) - - - - - -## 4.47.27 (2022-04-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.26 (2022-04-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.25 (2022-04-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.24 (2022-04-11) - - -### Bug Fixes - -* **Select:** prevent footer clicks from toggling ([#7193](https://github.com/patternfly/patternfly-react/issues/7193)) ([2cd10c2](https://github.com/patternfly/patternfly-react/commit/2cd10c2a0a11dcd14f85116369fd47dffcb12295)) - - - - - -## 4.47.23 (2022-04-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.22 (2022-04-11) - - -### Bug Fixes - -* **react-styles:** support esm import and export ([#7084](https://github.com/patternfly/patternfly-react/issues/7084)) ([b66ea14](https://github.com/patternfly/patternfly-react/commit/b66ea14fa0949b0626184455a4df46312b87171a)) - - - - - -## 4.47.21 (2022-04-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.20 (2022-04-08) - - -### Bug Fixes - -* **NumberInput:** Custom increment/decrement and thresholds ([#7159](https://github.com/patternfly/patternfly-react/issues/7159)) ([28853de](https://github.com/patternfly/patternfly-react/commit/28853de1d02a4d46d81100da895d5e73a3ec05cf)) - - - - - -## 4.47.19 (2022-04-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.18 (2022-04-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.17 (2022-04-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.16 (2022-04-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.15 (2022-04-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.14 (2022-03-30) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.13 (2022-03-29) - - -### Bug Fixes - -* **components:** fix newline interpolation of text input values ([#6935](https://github.com/patternfly/patternfly-react/issues/6935)) ([c667ef0](https://github.com/patternfly/patternfly-react/commit/c667ef048cbf246e920a0111d4e900f1079cc6bc)), closes [#5324](https://github.com/patternfly/patternfly-react/issues/5324) - - - - - -## 4.47.12 (2022-03-29) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.11 (2022-03-29) - - -### Bug Fixes - -* **Drawer:** Updated resizable drawer to make it more accessible ([#7118](https://github.com/patternfly/patternfly-react/issues/7118)) ([0363ae6](https://github.com/patternfly/patternfly-react/commit/0363ae6638aab17e55f26bae5017bcd7f83f8ed5)) - - - - - -## 4.47.10 (2022-03-29) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.9 (2022-03-28) - - -### Bug Fixes - -* **Select:** view more fixes ([#7107](https://github.com/patternfly/patternfly-react/issues/7107)) ([94f24f6](https://github.com/patternfly/patternfly-react/commit/94f24f65b043a2d3f3ae8fe7247aaf55b05987a7)) - - - - - -## 4.47.8 (2022-03-28) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.7 (2022-03-28) - - -### Bug Fixes - -* **CalendarMonth:** resolve regression for selecting a date ([#7130](https://github.com/patternfly/patternfly-react/issues/7130)) ([5397e89](https://github.com/patternfly/patternfly-react/commit/5397e895ba52434b98b4206ac47535ed36d1bf00)) - - - - - -## 4.47.6 (2022-03-28) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.5 (2022-03-25) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.4 (2022-03-25) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.3 (2022-03-25) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.2 (2022-03-25) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.47.1 (2022-03-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.47.0 (2022-03-23) - - -### Features - -* **Select:** add flag to not reset on select, add event to toggle callback ([#7093](https://github.com/patternfly/patternfly-react/issues/7093)) ([ec2afb1](https://github.com/patternfly/patternfly-react/commit/ec2afb1ea414f63a2fadc56bbaa968a0caad5fd6)) - - - - - -## 4.46.2 (2022-03-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.46.1 (2022-03-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.46.0 (2022-03-23) - - -### Features - -* **CalendarMonth:** make date prop optional ([#7077](https://github.com/patternfly/patternfly-react/issues/7077)) ([e388854](https://github.com/patternfly/patternfly-react/commit/e388854e26b57d7cada63832b7f52e9c7bdad9a0)) - - - - - -## 4.45.2 (2022-03-22) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.45.1 (2022-03-21) - - -### Bug Fixes - -* **Tooltip:** horizontal scroll bar causing misaligned tooltip ([#7062](https://github.com/patternfly/patternfly-react/issues/7062)) ([9540d0c](https://github.com/patternfly/patternfly-react/commit/9540d0c5ab256a19143381755e33b661a13d2a00)) - - - - - -# 4.45.0 (2022-03-21) - - -### Features - -* **TextInput, TextArea, FormSelect:** add isIconSprite prop ([#7052](https://github.com/patternfly/patternfly-react/issues/7052)) ([94e1a85](https://github.com/patternfly/patternfly-react/commit/94e1a855840ca74d4d934a863531359a4f84c265)) - - - - - -## 4.44.5 (2022-03-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.44.4 (2022-03-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.44.3 (2022-03-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.44.2 (2022-03-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.44.1 (2022-03-16) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.44.0 (2022-03-15) - - -### Features - -* **CodeEditor:** 6226 size to fit height ([#7033](https://github.com/patternfly/patternfly-react/issues/7033)) ([f18abd3](https://github.com/patternfly/patternfly-react/commit/f18abd3020e04ee6602fd168d503f43cc0de649e)) - - - - - -## 4.43.22 (2022-03-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.21 (2022-03-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.20 (2022-03-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.19 (2022-03-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.18 (2022-03-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.17 (2022-03-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.16 (2022-03-04) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.15 (2022-03-04) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.14 (2022-03-04) - - -### Bug Fixes - -* **NotificationDrawer:** Drawer receives focus after opening ([#6963](https://github.com/patternfly/patternfly-react/issues/6963)) ([f5b1c97](https://github.com/patternfly/patternfly-react/commit/f5b1c97f1c3ef6155d39d16da401fb9937b539e9)) - - - - - -## 4.43.13 (2022-03-04) - - -### Bug Fixes - -* **Toolbar:** update test ([#6995](https://github.com/patternfly/patternfly-react/issues/6995)) ([4ddaeaa](https://github.com/patternfly/patternfly-react/commit/4ddaeaad5cd550b1bd88195a7a0eb9643cdb70f4)) - - - - - -## 4.43.12 (2022-03-02) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.11 (2022-03-02) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.10 (2022-03-02) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.9 (2022-03-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.8 (2022-02-24) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.7 (2022-02-22) - - -### Bug Fixes - -* update release version number ([#6964](https://github.com/patternfly/patternfly-react/issues/6964)) ([6eefe79](https://github.com/patternfly/patternfly-react/commit/6eefe79b9eaaf871ecf93e3fdfd0e49c7326b221)) - - - - - -## 4.43.6 (2022-02-22) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.5 (2022-02-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.4 (2022-02-17) - - -### Bug Fixes - -* **Select:** Do not filter out view more button on filter ([#6848](https://github.com/patternfly/patternfly-react/issues/6848)) ([6c7ac8a](https://github.com/patternfly/patternfly-react/commit/6c7ac8a5e287670d7469ecc0ef137bc33583e739)) - - - - - -## 4.43.3 (2022-02-16) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.2 (2022-02-16) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.43.1 (2022-02-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.43.0 (2022-02-15) - - -### Features - -* **table:** ability to add expand/collapse all to th ([#6914](https://github.com/patternfly/patternfly-react/issues/6914)) ([ee510ee](https://github.com/patternfly/patternfly-react/commit/ee510ee8c8d3a069b75c73873ebd32b0b9a4d9c7)) - - - - - -## 4.42.2 (2022-02-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.42.1 (2022-02-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.42.0 (2022-02-14) - - -### Features - -* **Page:** Added center alignment for page sections ([#6893](https://github.com/patternfly/patternfly-react/issues/6893)) ([440918f](https://github.com/patternfly/patternfly-react/commit/440918fc1bd9795cd916a04fe32677ae5f69ef68)) - - - - - -# 4.41.0 (2022-02-11) - - -### Features - -* **Menu:** allow drilldown menu functions ([#6872](https://github.com/patternfly/patternfly-react/issues/6872)) ([b345b07](https://github.com/patternfly/patternfly-react/commit/b345b07de7c1576e984a06f4c573641b04956f5c)) - - - - - -## 4.40.3 (2022-02-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.40.2 (2022-02-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.40.1 (2022-02-11) - - -### Bug Fixes - -* **Select:** Fixed so that view more btn click does not close the menu in React 16 ([#6922](https://github.com/patternfly/patternfly-react/issues/6922)) ([89da91d](https://github.com/patternfly/patternfly-react/commit/89da91dfd3a9e7af8ee26f8b6b5ac01c5b2487d4)) - - - - - -# 4.40.0 (2022-02-10) - - -### Features - -* **ToolTip:** Diagonal tooltip placement ([#6887](https://github.com/patternfly/patternfly-react/issues/6887)) ([897fd7d](https://github.com/patternfly/patternfly-react/commit/897fd7d248888e7324d36f574231985e8523a700)) - - - - - -## 4.39.3 (2022-02-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.39.2 (2022-02-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.39.1 (2022-02-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.39.0 (2022-02-08) - - -### Features - -* **MenuToggle:** add full height variation ([#6869](https://github.com/patternfly/patternfly-react/issues/6869)) ([415e02f](https://github.com/patternfly/patternfly-react/commit/415e02f5e5617367db717cd5120df04ec1a208eb)) - - - - - -# 4.38.0 (2022-02-08) - - -### Features - -* **Table:** add striping ([#6886](https://github.com/patternfly/patternfly-react/issues/6886)) ([47abda7](https://github.com/patternfly/patternfly-react/commit/47abda7831e21c58051b90982f02cb48f7a22a22)) - - - - - -## 4.37.21 (2022-02-07) - - -### Bug Fixes - -* **TimePicker:** apply includeSeconds when making options ([#6865](https://github.com/patternfly/patternfly-react/issues/6865)) ([5b6d6c9](https://github.com/patternfly/patternfly-react/commit/5b6d6c9979046c111b00456622758f542627ac11)) - - - - - -## 4.37.20 (2022-02-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.37.19 (2022-02-07) - - -### Bug Fixes - -* **Select:** remove logic from default inputAutoComplete ([#6873](https://github.com/patternfly/patternfly-react/issues/6873)) ([b3b61c1](https://github.com/patternfly/patternfly-react/commit/b3b61c175f23cdc9dad8c71054301d1090795ede)) - - - - - -## 4.37.18 (2022-02-04) - - -### Bug Fixes - -* **TimePicker:** remove automatically validation from onChange event ([#6884](https://github.com/patternfly/patternfly-react/issues/6884)) ([e7088e4](https://github.com/patternfly/patternfly-react/commit/e7088e4e7a9348fa412d2815af1b0820ee7754ef)) - - - - - -## 4.37.17 (2022-02-04) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.37.16 (2022-02-02) - - -### Bug Fixes - -* **numberinput:** import input group component instead ([#6850](https://github.com/patternfly/patternfly-react/issues/6850)) ([2a94545](https://github.com/patternfly/patternfly-react/commit/2a94545ead3be3ea3c987b1273e18b943315c36e)) - - - - - -## 4.37.15 (2022-01-28) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.37.14 (2022-01-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.37.13 (2022-01-26) - - -### Reverts - -* Revert "Improve IAction type (#6108)" (#6862) ([94aea84](https://github.com/patternfly/patternfly-react/commit/94aea84036e26f4cc472b7d445ee49b088eb6a47)), closes [#6108](https://github.com/patternfly/patternfly-react/issues/6108) [#6862](https://github.com/patternfly/patternfly-react/issues/6862) - - - - - -## 4.37.12 (2022-01-26) - - -### Bug Fixes - -* **OverflowMenu:** ignore menu being covered in intg. tests ([#6852](https://github.com/patternfly/patternfly-react/issues/6852)) ([066e2bb](https://github.com/patternfly/patternfly-react/commit/066e2bb994f4eca5538fb9287e5d10ddf4a30cac)) - - - - - -## 4.37.11 (2022-01-26) - - -### Reverts - -* Revert "feat(Tabs): enforce restricted type for children (#6767)" (#6857) ([eca9a70](https://github.com/patternfly/patternfly-react/commit/eca9a708e8d53416e60a790ea876aa0b2e398212)), closes [#6767](https://github.com/patternfly/patternfly-react/issues/6767) [#6857](https://github.com/patternfly/patternfly-react/issues/6857) - - - - - -## 4.37.10 (2022-01-25) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.37.9 (2022-01-25) - - -### Bug Fixes - -* **Select:** Footer keyboard bugs ([#6844](https://github.com/patternfly/patternfly-react/issues/6844)) ([7f06125](https://github.com/patternfly/patternfly-react/commit/7f06125cfb52884708107da82ca3800207c9846f)) - - - - - -## 4.37.8 (2022-01-24) - - -### Bug Fixes - -* **table:** fixed action example ([#6800](https://github.com/patternfly/patternfly-react/issues/6800)) ([eaaedc2](https://github.com/patternfly/patternfly-react/commit/eaaedc28cf54cca1a47aaa5c4f5f76a11d32864d)) - - - - - -## 4.37.7 (2022-01-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.37.6 (2022-01-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.37.5 (2022-01-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.37.4 (2022-01-20) - - -### Bug Fixes - -* **DatePicker:** update empty state validation and add onblur event ([#6822](https://github.com/patternfly/patternfly-react/issues/6822)) ([258e818](https://github.com/patternfly/patternfly-react/commit/258e81861adc0488ae42f349aff78f06f2874fa7)) - - - - - -## 4.37.3 (2022-01-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.37.2 (2022-01-20) - - -### Bug Fixes - -* **Select:** Fixed dot next to the spinner in grouped view more variant ([#6831](https://github.com/patternfly/patternfly-react/issues/6831)) ([ccc81b4](https://github.com/patternfly/patternfly-react/commit/ccc81b4c8c30506f28e61e73dcbc106da50ca692)) - - - - - -## 4.37.1 (2022-01-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.37.0 (2022-01-20) - - -### Features - -* **Truncate:** added Truncate component ([#6713](https://github.com/patternfly/patternfly-react/issues/6713)) ([c803b5d](https://github.com/patternfly/patternfly-react/commit/c803b5df3761f689172d79bbc71bc38623b0bf5a)) - - - - - -## 4.36.6 (2022-01-20) - - -### Bug Fixes - -* **TextInputGroup:** address various issues ([#6774](https://github.com/patternfly/patternfly-react/issues/6774)) ([010058a](https://github.com/patternfly/patternfly-react/commit/010058acc7115fb76a35fe06634083ada62cece0)) - - - - - -## 4.36.5 (2022-01-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.36.4 (2022-01-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.36.3 (2022-01-19) - - -### Bug Fixes - -* **examples:** amend row index in tree table examples ([#6830](https://github.com/patternfly/patternfly-react/issues/6830)) ([e676fb1](https://github.com/patternfly/patternfly-react/commit/e676fb1171618e957a4564af31c15ca6e3800507)), closes [#6719](https://github.com/patternfly/patternfly-react/issues/6719) - - - - - -## 4.36.2 (2022-01-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.36.1 (2022-01-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.36.0 (2022-01-19) - - -### Features - -* **NumberInput:** call onMinus/onPlus on arrow-up/down pressed ([#6764](https://github.com/patternfly/patternfly-react/issues/6764)) ([545a7f8](https://github.com/patternfly/patternfly-react/commit/545a7f8791dbf2937416509a01b197cc1daf80db)) - - - - - -# 4.35.0 (2022-01-19) - - -### Features - -* **TimePicker:** Allow for seconds via new prop; includeSeconds ([#6769](https://github.com/patternfly/patternfly-react/issues/6769)) ([417b51a](https://github.com/patternfly/patternfly-react/commit/417b51a6b8bd997042e16a0e821fb63281e53d30)) - - - - - -## 4.34.5 (2022-01-18) - - -### Bug Fixes - -* **Tabs:** enable tabs scroll button for small window ([#6784](https://github.com/patternfly/patternfly-react/issues/6784)) ([a29b430](https://github.com/patternfly/patternfly-react/commit/a29b43094ae3d5ce7f4b26e4041cd595e675ee58)) - - - - - -## 4.34.4 (2022-01-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.34.3 (2022-01-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.34.2 (2022-01-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.34.1 (2022-01-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.34.0 (2022-01-17) - - -### Features - -* **Tabs:** enforce restricted type for children ([#6767](https://github.com/patternfly/patternfly-react/issues/6767)) ([0d224df](https://github.com/patternfly/patternfly-react/commit/0d224dfb71b1a89c5783bd9ea290ece2f325ad21)) - - - - - -## 4.33.1 (2022-01-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.33.0 (2022-01-14) - - -### Features - -* **DescriptionList:** add option to fill columns first ([#6736](https://github.com/patternfly/patternfly-react/issues/6736)) ([c955c29](https://github.com/patternfly/patternfly-react/commit/c955c2917dbc4b85ce58fac4f93845c429186e1b)) - - - - - -## 4.32.2 (2022-01-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.32.1 (2022-01-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.32.0 (2022-01-12) - - -### Features - -* **expandable-section:** added indented variation ([#6763](https://github.com/patternfly/patternfly-react/issues/6763)) ([703b922](https://github.com/patternfly/patternfly-react/commit/703b9224e43bedd5b37ec41d8f26f2939836d610)) - - - - - -## 4.31.1 (2022-01-11) - - -### Bug Fixes - -* **Select:** update typeahead Select children when any option attribute changes ([#6747](https://github.com/patternfly/patternfly-react/issues/6747)) ([1e03f3c](https://github.com/patternfly/patternfly-react/commit/1e03f3c6d0a7c507e33398c98863e40bb2233a62)) - - - - - -# 4.31.0 (2022-01-11) - - -### Features - -* **ToggleGroup:** support disabling all items under the parent ([#6700](https://github.com/patternfly/patternfly-react/issues/6700)) ([a60c8f3](https://github.com/patternfly/patternfly-react/commit/a60c8f3485546c797750451714a70b7e84a4ba0f)) - - - - - -## 4.30.1 (2022-01-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.30.0 (2022-01-11) - - -### Features - -* **Table:** update clickable area for checks/radios ([#6754](https://github.com/patternfly/patternfly-react/issues/6754)) ([c4f3c2d](https://github.com/patternfly/patternfly-react/commit/c4f3c2d7f515e3d6ad73d8b52238ca426281469a)) - - - - - -## 4.29.2 (2022-01-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.29.1 (2022-01-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.29.0 (2022-01-10) - - -### Features - -* **Dropdown:** add plain-text variant support ([#6721](https://github.com/patternfly/patternfly-react/issues/6721)) ([e5000e3](https://github.com/patternfly/patternfly-react/commit/e5000e36194e36b9c6ae49efdb0a513125efcb70)) - - - - - -## 4.28.11 (2022-01-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.28.10 (2022-01-10) - - -### Bug Fixes - -* **Tabs:** allow href navigation from tabs ([#6755](https://github.com/patternfly/patternfly-react/issues/6755)) ([290d89a](https://github.com/patternfly/patternfly-react/commit/290d89aed2dd4517db9859cc80ef2745cb8a779b)) - - - - - -## 4.28.9 (2022-01-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.28.8 (2022-01-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.28.7 (2022-01-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.28.6 (2022-01-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.28.5 (2022-01-07) - - -### Bug Fixes - -* **jumplinks:** Updated JumpLinks demo to allow for horizontal display ([#6731](https://github.com/patternfly/patternfly-react/issues/6731)) ([f37b934](https://github.com/patternfly/patternfly-react/commit/f37b9342e678da247056c73767d5d40ff5435bda)) - - - - - -## 4.28.4 (2022-01-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.28.3 (2022-01-06) - - -### Bug Fixes - -* **TopologyControlBar:** Update screen reader className to latest ([#6739](https://github.com/patternfly/patternfly-react/issues/6739)) ([ed9da57](https://github.com/patternfly/patternfly-react/commit/ed9da575fddf9fe7af8a891972f7a66520785411)) - - - - - -## 4.28.2 (2022-01-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.28.1 (2022-01-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.28.0 (2022-01-05) - - -### Features - -* **Table:** allow a generic to be passed for cell props ([#6691](https://github.com/patternfly/patternfly-react/issues/6691)) ([e22c7be](https://github.com/patternfly/patternfly-react/commit/e22c7bebf630b7cd71e4dc434c593b69fa2fb2c8)) - - - - - -## 4.27.3 (2022-01-04) - - -### Bug Fixes - -* **docs:** fix broken theme-patternfly-org link ([#6726](https://github.com/patternfly/patternfly-react/issues/6726)) ([4ba15e9](https://github.com/patternfly/patternfly-react/commit/4ba15e9d9611afbb80d995e4d63f5478c4212a9e)) - - - - - -## 4.27.2 (2022-01-04) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.27.1 (2022-01-04) - - -### Bug Fixes - -* **OverflowMenu:** pass HTMLDivElements props to group and control divs ([#6674](https://github.com/patternfly/patternfly-react/issues/6674)) ([e6d0d64](https://github.com/patternfly/patternfly-react/commit/e6d0d6406a07de04f4b232ca9a21247c0e9746c0)) - - - - - -# 4.27.0 (2021-12-22) - - -### Features - -* **Toolbar:** support customizing text in ToolbarChipGroupContent ([#6694](https://github.com/patternfly/patternfly-react/issues/6694)) ([24266ad](https://github.com/patternfly/patternfly-react/commit/24266adf569c027574abd1503b5e46974220349a)) - - - - - -## 4.26.5 (2021-12-16) - - -### Bug Fixes - -* **LogViewer:** fix the issue that scrollbar could compress the content of the logs ([#6702](https://github.com/patternfly/patternfly-react/issues/6702)) ([11aab1f](https://github.com/patternfly/patternfly-react/commit/11aab1f71a1aa9959cf14b887ab55b845a794a00)) - - - - - -## 4.26.4 (2021-12-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.26.3 (2021-12-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.26.2 (2021-12-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.26.1 (2021-12-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.26.0 (2021-12-09) - - -### Features - -* **Popover:** add composable header and alert variants ([#6664](https://github.com/patternfly/patternfly-react/issues/6664)) ([9028e8b](https://github.com/patternfly/patternfly-react/commit/9028e8ba5d674bde6a7e29532f7926e200dd632a)) - - - - - -## 4.25.1 (2021-12-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.25.0 (2021-12-08) - - -### Features - -* **DualListSelector:** add composable tree example ([#6652](https://github.com/patternfly/patternfly-react/issues/6652)) ([5fe977b](https://github.com/patternfly/patternfly-react/commit/5fe977becb5dea615724abf846f315e50931c188)) - - - - - -## 4.24.1 (2021-12-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.24.0 (2021-12-06) - - -### Features - -* **Card:** Add disabled card and clean up props ([#6659](https://github.com/patternfly/patternfly-react/issues/6659)) ([86f225a](https://github.com/patternfly/patternfly-react/commit/86f225ab2e02d617e2d380c4a7f7593037c50e84)) - - - - - -# 4.23.0 (2021-12-06) - - -### Features - -* **MenuToggle:** add plain with text variant ([#6627](https://github.com/patternfly/patternfly-react/issues/6627)) ([1f4ca5e](https://github.com/patternfly/patternfly-react/commit/1f4ca5e36d7077da3ff3e6918874048c784216e0)) - - - - - -# 4.22.0 (2021-12-06) - - -### Features - -* **Dropdown:** add toggle variants ([#6651](https://github.com/patternfly/patternfly-react/issues/6651)) ([6414309](https://github.com/patternfly/patternfly-react/commit/64143094aec86aed86adb320e059d987af4f5f24)) - - - - - -## 4.21.1 (2021-12-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.21.0 (2021-12-03) - - -### Features - -* **Select:** add ability to persist filtered children state ([#6670](https://github.com/patternfly/patternfly-react/issues/6670)) ([f618577](https://github.com/patternfly/patternfly-react/commit/f618577582e389409978bd1d6512ca0cf5d855cf)) - - - - - -## 4.20.17 (2021-12-03) - - -### Bug Fixes - -* **Slider:** fixed examples with custom steps and input ([#6662](https://github.com/patternfly/patternfly-react/issues/6662)) ([b4cab38](https://github.com/patternfly/patternfly-react/commit/b4cab38a2492564bf91e3711ce322951bcc6a051)) - - - - - -## 4.20.16 (2021-12-02) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.20.15 (2021-12-02) - - -### Bug Fixes - -* **Tile:** fix selecting tile in tile demo ([#6653](https://github.com/patternfly/patternfly-react/issues/6653)) ([e12e44d](https://github.com/patternfly/patternfly-react/commit/e12e44d4b623de305b7df04174144a9496d282a7)) - - - - - -## 4.20.14 (2021-12-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.20.13 (2021-11-30) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.20.12 (2021-11-30) - - -### Bug Fixes - -* **action-list:** added support for classname ([#6647](https://github.com/patternfly/patternfly-react/issues/6647)) ([dd3d2ce](https://github.com/patternfly/patternfly-react/commit/dd3d2ce32b4d3e7562faf465abdc508e17f097d9)) - - - - - -## 4.20.11 (2021-11-30) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.20.10 (2021-11-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.20.9 (2021-11-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.20.8 (2021-11-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.20.7 (2021-11-18) - - -### Bug Fixes - -* **pagination:** updated toggleTemplate prop description to include ofWord prop ([#6622](https://github.com/patternfly/patternfly-react/issues/6622)) ([26733a6](https://github.com/patternfly/patternfly-react/commit/26733a6a256ad0e873afbc268a712027470fdeaa)) - - - - - -## 4.20.6 (2021-11-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.20.5 (2021-11-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.20.4 (2021-11-15) - - -### Bug Fixes - -* **FileUpload:** Downgrade react-dropzone back to 9.0.0 to avoid a breaking type change, fix behavior regressions ([#6610](https://github.com/patternfly/patternfly-react/issues/6610)) ([574bf4f](https://github.com/patternfly/patternfly-react/commit/574bf4ff3ccf7f67ce750bc48067eaf826e99990)) - - - - - -## 4.20.3 (2021-11-15) - - -### Bug Fixes - -* **Menu:** allow maxMenuHeight with Scrollabe ([#6608](https://github.com/patternfly/patternfly-react/issues/6608)) ([8c1f12c](https://github.com/patternfly/patternfly-react/commit/8c1f12c2b0e86bbc5ba1071db3ebf29fee7421a0)) - - - - - -## 4.20.2 (2021-11-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.20.1 (2021-11-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.20.0 (2021-11-12) - - -### Features - -* **card:** added hoverable/selectable/selected-raised variant ([#6565](https://github.com/patternfly/patternfly-react/issues/6565)) ([8c60568](https://github.com/patternfly/patternfly-react/commit/8c60568ba4fa18398fed636710e222ce506de82c)) - - - - - -## 4.19.2 (2021-11-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.19.1 (2021-11-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.19.0 (2021-11-11) - - -### Features - -* **ComposableTable:** add sticky columns and nested headers ([#6538](https://github.com/patternfly/patternfly-react/issues/6538)) ([f11245b](https://github.com/patternfly/patternfly-react/commit/f11245bfccc8c6c02a9d5545a69ed533743cc552)) - - - - - -# 4.18.0 (2021-11-11) - - -### Features - -* **contextselector:** added support for context selector items as links ([#6554](https://github.com/patternfly/patternfly-react/issues/6554)) ([c465388](https://github.com/patternfly/patternfly-react/commit/c4653881eee0cd8ec8e3a7125bbef0bded9f2de0)) - - - - - -# 4.17.0 (2021-11-11) - - -### Features - -* **Navigation:** Added exemple with third level ([#6564](https://github.com/patternfly/patternfly-react/issues/6564)) ([c30da53](https://github.com/patternfly/patternfly-react/commit/c30da532855118f705c8cfc87c545bb1eea11ebb)) - - - - - -# 4.16.0 (2021-11-11) - - -### Features - -* enhance type correctness of CodeEditor ([#6579](https://github.com/patternfly/patternfly-react/issues/6579)) ([e1ad65c](https://github.com/patternfly/patternfly-react/commit/e1ad65c225968d5a9c74019d19e4a3c5e2666926)) - - - - - -## 4.15.4 (2021-11-10) - - -### Bug Fixes - -* **jumplinks:** fixed to always set clicked item as active ([#6542](https://github.com/patternfly/patternfly-react/issues/6542)) ([845c98f](https://github.com/patternfly/patternfly-react/commit/845c98f5f3df8aa9b6acc190707c5f1d7bf3ca38)) - - - - - -## 4.15.3 (2021-11-10) - - -### Bug Fixes - -* **Menu:** stop passing disableHover to DrilldownMenu DOM ([#6571](https://github.com/patternfly/patternfly-react/issues/6571)) ([63dcf25](https://github.com/patternfly/patternfly-react/commit/63dcf256723848ff3789828fc0a5f86d5009fc87)) - - - - - -## 4.15.2 (2021-11-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.15.1 (2021-11-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.15.0 (2021-11-09) - - -### Features - -* **Table:** set default sort direction ([#6544](https://github.com/patternfly/patternfly-react/issues/6544)) ([9ee4942](https://github.com/patternfly/patternfly-react/commit/9ee49428c8e1041721f2a09f8176a5aba3335049)) - - - - - -## 4.14.4 (2021-11-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.14.3 (2021-11-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.14.2 (2021-11-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.14.1 (2021-11-08) - - -### Bug Fixes - -* **acccessconsoles:** use object type Select options values in order to not mix displayed text with option keys ([#6496](https://github.com/patternfly/patternfly-react/issues/6496)) ([975c8e1](https://github.com/patternfly/patternfly-react/commit/975c8e14d7ea8c53eb4048ea6ef73e804b3ad2be)) - - - - - -# 4.14.0 (2021-11-04) - - -### Features - -* **log-viewer:** support ANSI color ([#6519](https://github.com/patternfly/patternfly-react/issues/6519)) ([936a699](https://github.com/patternfly/patternfly-react/commit/936a699b0514a492d3c40be08932fb7bab275cce)) - - - - - -## 4.13.11 (2021-11-01) - - -### Bug Fixes - -* **AboutModal:** allow to disable FocusTrap ([#6509](https://github.com/patternfly/patternfly-react/issues/6509)) ([72536e1](https://github.com/patternfly/patternfly-react/commit/72536e1f73641ff3f19f865f08dbb41ad0ee7b9f)) - - - - - -## 4.13.10 (2021-10-29) - - -### Bug Fixes - -* **Banner:** forward props ([#6511](https://github.com/patternfly/patternfly-react/issues/6511)) ([e36c890](https://github.com/patternfly/patternfly-react/commit/e36c89077afa82340994c0e3c0fc929e601e01bc)) - - - - - -## 4.13.9 (2021-10-28) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.13.8 (2021-10-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.13.7 (2021-10-27) - - -### Bug Fixes - -* change transformer cjs package to private ([#6515](https://github.com/patternfly/patternfly-react/issues/6515)) ([efcb357](https://github.com/patternfly/patternfly-react/commit/efcb3573b71541328ce2b16caa80ce33b2a62131)) - - - - - -## 4.13.6 (2021-10-26) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.13.5 (2021-10-26) - - -### Bug Fixes - -* **tokens:** added check for no matching var to avoid infinite loop ([#6502](https://github.com/patternfly/patternfly-react/issues/6502)) ([99605c2](https://github.com/patternfly/patternfly-react/commit/99605c213f12490d0abe75910e05c3e6da26a1f3)) - - - - - -## 4.13.4 (2021-10-26) - - -### Bug Fixes - -* add transformer package ([#6507](https://github.com/patternfly/patternfly-react/issues/6507)) ([daffd28](https://github.com/patternfly/patternfly-react/commit/daffd2864388abe63e625f962a8b38c2b7056209)) - - - - - -## 4.13.3 (2021-10-26) - - -### Bug Fixes - -* **transformer:** publish transformer in patternfly org ([#6506](https://github.com/patternfly/patternfly-react/issues/6506)) ([b739af3](https://github.com/patternfly/patternfly-react/commit/b739af318400b41d4e9a53bdff6232ecc176916e)) - - - - - -## 4.13.2 (2021-10-26) - - -### Bug Fixes - -* **readme:** update react-core readme ([#6505](https://github.com/patternfly/patternfly-react/issues/6505)) ([d4f9a11](https://github.com/patternfly/patternfly-react/commit/d4f9a114584eea7ab67873f199e80b348886e14b)) - - - - - -## 4.13.1 (2021-10-26) - - -### Bug Fixes - -* **DualListSelector:** account for duplicate folders ([#6499](https://github.com/patternfly/patternfly-react/issues/6499)) ([e531e68](https://github.com/patternfly/patternfly-react/commit/e531e68e7adc58459b3630f5c915ed69e3021012)) - - - - - -# 4.13.0 (2021-10-26) - - -### Features - -* **toolbar:** add sticky top modifier to toolbar ([#6447](https://github.com/patternfly/patternfly-react/issues/6447)) ([fe7605a](https://github.com/patternfly/patternfly-react/commit/fe7605a67428b43ec00b3cb2117270296576737c)) - - - - - -## 4.12.1 (2021-10-26) - - -### Bug Fixes - -* **types:** SelectOptionProp made optional ([#6503](https://github.com/patternfly/patternfly-react/issues/6503)) ([716ac80](https://github.com/patternfly/patternfly-react/commit/716ac80e2414507d589ee3002fc0cea0068ae59c)) - - - - - -# 4.12.0 (2021-10-26) - - -### Features - -* **TextInputGroup:** add text input group ([#6482](https://github.com/patternfly/patternfly-react/issues/6482)) ([a02fd4f](https://github.com/patternfly/patternfly-react/commit/a02fd4fe3345245b2252ee5a261f5b1460490642)), closes [patternfly/patternfly-react#6409](https://github.com/patternfly/patternfly-react/issues/6409) - - - - - -## 4.11.4 (2021-10-26) - - -### Bug Fixes - -* **KebabToggle:** adds event to onToggle definition ([#6490](https://github.com/patternfly/patternfly-react/issues/6490)) ([0441575](https://github.com/patternfly/patternfly-react/commit/04415757917062aa13c06b34bd94ef38c2334088)) - - - - - -## 4.11.3 (2021-10-26) - - -### Bug Fixes - -* **Modal:** test clean up ([#6489](https://github.com/patternfly/patternfly-react/issues/6489)) ([c8eaa7c](https://github.com/patternfly/patternfly-react/commit/c8eaa7c838fbedb98ea0f38e4f535488040a72e2)) - - - - - -## 4.11.2 (2021-10-25) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.11.1 (2021-10-25) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.11.0 (2021-10-25) - - -### Features - -* **Tabs:** Added support for tab content body with padding, added tabs open and tab secondary tabs demos ([#6484](https://github.com/patternfly/patternfly-react/issues/6484)) ([0ccbe9d](https://github.com/patternfly/patternfly-react/commit/0ccbe9d1e6e0dac0730466c92a90fe2cd9f6560d)) - - - - - -## 4.10.1 (2021-10-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# 4.10.0 (2021-10-21) - - -### Features - -* **label:** added compact label, updated horizontal grid card demo ([#6448](https://github.com/patternfly/patternfly-react/issues/6448)) ([89e0431](https://github.com/patternfly/patternfly-react/commit/89e04317924282140606d45f2292aa3f658b4b6c)) - - - - - -## 4.9.1 (2021-10-21) - - -### Bug Fixes - -* **DescriptionListGroup:** forward props to DOM ([#6466](https://github.com/patternfly/patternfly-react/issues/6466)) ([b78e2aa](https://github.com/patternfly/patternfly-react/commit/b78e2aa9c0360ce8418f6e7b55274ea1a50de518)) - - - - - -# 4.9.0 (2021-10-20) - - -### Features - -* **Progress:** allow node titles ([#6470](https://github.com/patternfly/patternfly-react/issues/6470)) ([46d5252](https://github.com/patternfly/patternfly-react/commit/46d52523ad5111bb11729c2750abe9aeb35d9326)) - - - - - -# 4.8.0 (2021-10-20) - - -### Features - -* **DualListSelector:** add disabled flag ([#6442](https://github.com/patternfly/patternfly-react/issues/6442)) ([85e1314](https://github.com/patternfly/patternfly-react/commit/85e131435be12c2df79336e9fa56987ed3717417)) - - - - - -## 4.7.28 (2021-10-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.7.27 (2021-10-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.25...@patternfly/react-log-viewer@4.7.26) (2021-10-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.24...@patternfly/react-log-viewer@4.7.25) (2021-10-18) - - -### Bug Fixes - -* **LogViewer:** fix resizing problem ([#6459](https://github.com/patternfly/patternfly-react/issues/6459)) ([4fcb0bf](https://github.com/patternfly/patternfly-react/commit/4fcb0bfacf4d0334076ea8138a28103a8fabbb81)) - - - - - -## [4.7.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.23...@patternfly/react-log-viewer@4.7.24) (2021-10-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.22...@patternfly/react-log-viewer@4.7.23) (2021-10-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.21...@patternfly/react-log-viewer@4.7.22) (2021-10-14) - - -### Bug Fixes - -* **linter:** add .eslintignore items and bump linting packages ([#6420](https://github.com/patternfly/patternfly-react/issues/6420)) ([9d734cf](https://github.com/patternfly/patternfly-react/commit/9d734cfa68c3e425d70688020538c0ba71c8ac7d)) - - - - - -## [4.7.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.20...@patternfly/react-log-viewer@4.7.21) (2021-10-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.19...@patternfly/react-log-viewer@4.7.20) (2021-10-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.18...@patternfly/react-log-viewer@4.7.19) (2021-10-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.17...@patternfly/react-log-viewer@4.7.18) (2021-10-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.16...@patternfly/react-log-viewer@4.7.17) (2021-10-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.15...@patternfly/react-log-viewer@4.7.16) (2021-10-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.14...@patternfly/react-log-viewer@4.7.15) (2021-10-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.13...@patternfly/react-log-viewer@4.7.14) (2021-10-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.12...@patternfly/react-log-viewer@4.7.13) (2021-10-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.11...@patternfly/react-log-viewer@4.7.12) (2021-10-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.10...@patternfly/react-log-viewer@4.7.11) (2021-10-06) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.9...@patternfly/react-log-viewer@4.7.10) (2021-10-05) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.8...@patternfly/react-log-viewer@4.7.9) (2021-10-05) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.7...@patternfly/react-log-viewer@4.7.8) (2021-10-05) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.6...@patternfly/react-log-viewer@4.7.7) (2021-10-05) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.5...@patternfly/react-log-viewer@4.7.6) (2021-10-04) - - -### Bug Fixes - -* **log-viewer:** accurately estimate row height ([#6387](https://github.com/patternfly/patternfly-react/issues/6387)) ([9167ccc](https://github.com/patternfly/patternfly-react/commit/9167ccca5f404bfc5ce27f24f7f16f40946af1dc)) - - - - - -## [4.7.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.4...@patternfly/react-log-viewer@4.7.5) (2021-10-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.3...@patternfly/react-log-viewer@4.7.4) (2021-10-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.2...@patternfly/react-log-viewer@4.7.3) (2021-09-30) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.1...@patternfly/react-log-viewer@4.7.2) (2021-09-29) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.7.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.7.0...@patternfly/react-log-viewer@4.7.1) (2021-09-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# [4.7.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.17...@patternfly/react-log-viewer@4.7.0) (2021-09-27) - - -### Features - -* **LogViewer:** improve log viewer performance ([#6358](https://github.com/patternfly/patternfly-react/issues/6358)) ([ad52a68](https://github.com/patternfly/patternfly-react/commit/ad52a68caee56563a6fabb11a0dc0ea4122a8f7b)) - - - - - -## [4.6.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.16...@patternfly/react-log-viewer@4.6.17) (2021-09-24) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.15...@patternfly/react-log-viewer@4.6.16) (2021-09-22) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.14...@patternfly/react-log-viewer@4.6.15) (2021-09-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.13...@patternfly/react-log-viewer@4.6.14) (2021-09-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.12...@patternfly/react-log-viewer@4.6.13) (2021-09-16) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.11...@patternfly/react-log-viewer@4.6.12) (2021-09-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.10...@patternfly/react-log-viewer@4.6.11) (2021-09-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.9...@patternfly/react-log-viewer@4.6.10) (2021-09-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.8...@patternfly/react-log-viewer@4.6.9) (2021-09-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.7...@patternfly/react-log-viewer@4.6.8) (2021-09-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.6...@patternfly/react-log-viewer@4.6.7) (2021-09-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.5...@patternfly/react-log-viewer@4.6.6) (2021-09-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.4...@patternfly/react-log-viewer@4.6.5) (2021-09-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.3...@patternfly/react-log-viewer@4.6.4) (2021-09-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.2...@patternfly/react-log-viewer@4.6.3) (2021-09-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.1...@patternfly/react-log-viewer@4.6.2) (2021-09-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.6.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.6.0...@patternfly/react-log-viewer@4.6.1) (2021-09-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# [4.6.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.5.8...@patternfly/react-log-viewer@4.6.0) (2021-09-09) - - -### Features - -* **LogViewer:** add onScroll and footer props ([#6238](https://github.com/patternfly/patternfly-react/issues/6238)) ([096192a](https://github.com/patternfly/patternfly-react/commit/096192a3ed35f960069aa1da41a3eea52c3387f7)) - - - - - -## [4.5.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.5.7...@patternfly/react-log-viewer@4.5.8) (2021-09-01) - - -### Bug Fixes - -* **LogViewer:** add required dependency ([#6216](https://github.com/patternfly/patternfly-react/issues/6216)) ([a403254](https://github.com/patternfly/patternfly-react/commit/a4032548752c02870fa59fbfaf4ec6740f742e6c)) - - - - - -## [4.5.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.5.6...@patternfly/react-log-viewer@4.5.7) (2021-08-31) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.5.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.5.5...@patternfly/react-log-viewer@4.5.6) (2021-08-31) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.5.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.5.4...@patternfly/react-log-viewer@4.5.5) (2021-08-30) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.5.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.5.3...@patternfly/react-log-viewer@4.5.4) (2021-08-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.5.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.5.2...@patternfly/react-log-viewer@4.5.3) (2021-08-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.5.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.5.1...@patternfly/react-log-viewer@4.5.2) (2021-08-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.5.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.5.0...@patternfly/react-log-viewer@4.5.1) (2021-08-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# [4.5.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.17...@patternfly/react-log-viewer@4.5.0) (2021-08-23) - - -### Features - -* **LogViewer:** refactor the component to get rid of the gaps between items ([#6201](https://github.com/patternfly/patternfly-react/issues/6201)) ([65f89d4](https://github.com/patternfly/patternfly-react/commit/65f89d47f28d2100f8a204e40831d6d034b31c9a)) - - - - - -## [4.4.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.16...@patternfly/react-log-viewer@4.4.17) (2021-08-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.15...@patternfly/react-log-viewer@4.4.16) (2021-08-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.14...@patternfly/react-log-viewer@4.4.15) (2021-08-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.13...@patternfly/react-log-viewer@4.4.14) (2021-08-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.12...@patternfly/react-log-viewer@4.4.13) (2021-08-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.11...@patternfly/react-log-viewer@4.4.12) (2021-08-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.10...@patternfly/react-log-viewer@4.4.11) (2021-08-19) - - -### Bug Fixes - -* **LogViewer:** remove unused props ([#6186](https://github.com/patternfly/patternfly-react/issues/6186)) ([c828e21](https://github.com/patternfly/patternfly-react/commit/c828e215d9cbdb46134280e5a0479b55fe6c9c53)) - - - - - -## [4.4.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.9...@patternfly/react-log-viewer@4.4.10) (2021-08-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.8...@patternfly/react-log-viewer@4.4.9) (2021-08-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.7...@patternfly/react-log-viewer@4.4.8) (2021-08-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.6...@patternfly/react-log-viewer@4.4.7) (2021-08-16) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.5...@patternfly/react-log-viewer@4.4.6) (2021-08-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.4...@patternfly/react-log-viewer@4.4.5) (2021-08-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.3...@patternfly/react-log-viewer@4.4.4) (2021-08-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.2...@patternfly/react-log-viewer@4.4.3) (2021-08-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.1...@patternfly/react-log-viewer@4.4.2) (2021-08-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.4.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.4.0...@patternfly/react-log-viewer@4.4.1) (2021-08-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# [4.4.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.3.3...@patternfly/react-log-viewer@4.4.0) (2021-08-03) - - -### Features - -* **LogViewer:** Add demo with new controls ([#6064](https://github.com/patternfly/patternfly-react/issues/6064)) ([2343396](https://github.com/patternfly/patternfly-react/commit/2343396087f8b14706a88ecdbba90bb282b1875d)) - - - - - -## [4.3.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.3.2...@patternfly/react-log-viewer@4.3.3) (2021-08-02) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.3.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.3.1...@patternfly/react-log-viewer@4.3.2) (2021-08-02) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.3.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.3.0...@patternfly/react-log-viewer@4.3.1) (2021-08-02) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# [4.3.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.31...@patternfly/react-log-viewer@4.3.0) (2021-07-30) - - -### Features - -* **LogViewer:** Add dark theme ([#6044](https://github.com/patternfly/patternfly-react/issues/6044)) ([1ccb5e6](https://github.com/patternfly/patternfly-react/commit/1ccb5e68724013624a22288882c07aecd63829fa)) - - - - - -## [4.2.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.30...@patternfly/react-log-viewer@4.2.31) (2021-07-29) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.29...@patternfly/react-log-viewer@4.2.30) (2021-07-29) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.28...@patternfly/react-log-viewer@4.2.29) (2021-07-28) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.27...@patternfly/react-log-viewer@4.2.28) (2021-07-28) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.26...@patternfly/react-log-viewer@4.2.27) (2021-07-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.25...@patternfly/react-log-viewer@4.2.26) (2021-07-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.24...@patternfly/react-log-viewer@4.2.25) (2021-07-23) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.23...@patternfly/react-log-viewer@4.2.24) (2021-07-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.22...@patternfly/react-log-viewer@4.2.23) (2021-07-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.21...@patternfly/react-log-viewer@4.2.22) (2021-07-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.20...@patternfly/react-log-viewer@4.2.21) (2021-07-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.19...@patternfly/react-log-viewer@4.2.20) (2021-07-20) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.18...@patternfly/react-log-viewer@4.2.19) (2021-07-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.17...@patternfly/react-log-viewer@4.2.18) (2021-07-16) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.16...@patternfly/react-log-viewer@4.2.17) (2021-07-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.15...@patternfly/react-log-viewer@4.2.16) (2021-07-15) - - -### Bug Fixes - -* **LogViewer:** Do not overestimate size for empty lines ([#6033](https://github.com/patternfly/patternfly-react/issues/6033)) ([2812348](https://github.com/patternfly/patternfly-react/commit/2812348775a6be8d88eb28bd80f6dc5f6b36342d)), closes [#6021](https://github.com/patternfly/patternfly-react/issues/6021) - - - - - -## [4.2.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.14...@patternfly/react-log-viewer@4.2.15) (2021-07-14) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.13...@patternfly/react-log-viewer@4.2.14) (2021-07-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.12...@patternfly/react-log-viewer@4.2.13) (2021-07-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.11...@patternfly/react-log-viewer@4.2.12) (2021-07-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.10...@patternfly/react-log-viewer@4.2.11) (2021-07-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.9...@patternfly/react-log-viewer@4.2.10) (2021-07-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.8...@patternfly/react-log-viewer@4.2.9) (2021-07-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.7...@patternfly/react-log-viewer@4.2.8) (2021-07-09) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.6...@patternfly/react-log-viewer@4.2.7) (2021-07-08) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.5...@patternfly/react-log-viewer@4.2.6) (2021-07-07) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.4...@patternfly/react-log-viewer@4.2.5) (2021-07-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.3...@patternfly/react-log-viewer@4.2.4) (2021-07-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.2...@patternfly/react-log-viewer@4.2.3) (2021-06-30) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.2.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.1...@patternfly/react-log-viewer@4.2.2) (2021-06-30) - - -### Bug Fixes - -* **ci:** change master branch to main ([4ac4129](https://github.com/patternfly/patternfly-react/commit/4ac4129e8da9a37367ea7612019f8d7af1ed8836)) - - - - - -## [4.2.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.2.0...@patternfly/react-log-viewer@4.2.1) (2021-06-28) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# [4.2.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.33...@patternfly/react-log-viewer@4.2.0) (2021-06-21) - - -### Features - -* **LogViewer:** Make logviewer responsive and change search result styling ([#5927](https://github.com/patternfly/patternfly-react/issues/5927)) ([3f6a493](https://github.com/patternfly/patternfly-react/commit/3f6a4934127d23de1baf2447003296600d9f3c5b)) - - - - - -## [4.1.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.32...@patternfly/react-log-viewer@4.1.33) (2021-06-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.31...@patternfly/react-log-viewer@4.1.32) (2021-06-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.30...@patternfly/react-log-viewer@4.1.31) (2021-06-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.29...@patternfly/react-log-viewer@4.1.30) (2021-06-18) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.28...@patternfly/react-log-viewer@4.1.29) (2021-06-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.27...@patternfly/react-log-viewer@4.1.28) (2021-06-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.26...@patternfly/react-log-viewer@4.1.27) (2021-06-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.25...@patternfly/react-log-viewer@4.1.26) (2021-06-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.24...@patternfly/react-log-viewer@4.1.25) (2021-06-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.23...@patternfly/react-log-viewer@4.1.24) (2021-06-16) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.22...@patternfly/react-log-viewer@4.1.23) (2021-06-16) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.21...@patternfly/react-log-viewer@4.1.22) (2021-06-15) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.20...@patternfly/react-log-viewer@4.1.21) (2021-06-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.19...@patternfly/react-log-viewer@4.1.20) (2021-06-10) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.18...@patternfly/react-log-viewer@4.1.19) (2021-06-04) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.17...@patternfly/react-log-viewer@4.1.18) (2021-06-02) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.16...@patternfly/react-log-viewer@4.1.17) (2021-06-02) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.15...@patternfly/react-log-viewer@4.1.16) (2021-06-02) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.14...@patternfly/react-log-viewer@4.1.15) (2021-06-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.13...@patternfly/react-log-viewer@4.1.14) (2021-06-01) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.12...@patternfly/react-log-viewer@4.1.13) (2021-05-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.11...@patternfly/react-log-viewer@4.1.12) (2021-05-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.10...@patternfly/react-log-viewer@4.1.11) (2021-05-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.9...@patternfly/react-log-viewer@4.1.10) (2021-05-27) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.8...@patternfly/react-log-viewer@4.1.9) (2021-05-26) - - -### Bug Fixes - -* **log-viewer:** use proper peer dep ([a235106](https://github.com/patternfly/patternfly-react/commit/a23510640308f267c75a2403fa6ec629ec67e861)) - - - - - -## [4.1.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.7...@patternfly/react-log-viewer@4.1.8) (2021-05-26) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.6...@patternfly/react-log-viewer@4.1.7) (2021-05-25) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.5...@patternfly/react-log-viewer@4.1.6) (2021-05-25) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.4...@patternfly/react-log-viewer@4.1.5) (2021-05-24) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.3...@patternfly/react-log-viewer@4.1.4) (2021-05-21) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.2...@patternfly/react-log-viewer@4.1.3) (2021-05-19) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.1...@patternfly/react-log-viewer@4.1.2) (2021-05-17) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## [4.1.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.1.0...@patternfly/react-log-viewer@4.1.1) (2021-05-13) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -# [4.1.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.0.2...@patternfly/react-log-viewer@4.1.0) (2021-05-13) - - -### Features - -* **LogViewer:** refactor toolbar functionality ([#5769](https://github.com/patternfly/patternfly-react/issues/5769)) ([ff82b7b](https://github.com/patternfly/patternfly-react/commit/ff82b7b55b4f10f17b890f8a97174595909e2edf)) - - - - - -## [4.0.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-log-viewer@4.0.1...@patternfly/react-log-viewer@4.0.2) (2021-05-12) - -**Note:** Version bump only for package @patternfly/react-log-viewer - - - - - -## 4.0.1 (2021-05-11) - -**Note:** Version bump only for package @patternfly/react-log-viewer diff --git a/packages/react-log-viewer/package.json b/packages/react-log-viewer/package.json deleted file mode 100644 index 01bbeec8a96..00000000000 --- a/packages/react-log-viewer/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "@patternfly/react-log-viewer", - "version": "4.87.77", - "description": "Terminal renderer", - "main": "dist/js/index.js", - "module": "dist/esm/index.js", - "types": "dist/esm/index.d.ts", - "sideEffects": false, - "publishConfig": { - "access": "public", - "tag": "prerelease" - }, - "repository": { - "type": "git", - "url": "https://github.com/patternfly/patternfly-react.git" - }, - "keywords": [ - "react", - "patternfly", - "log-viewer" - ], - "author": "Red Hat", - "license": "MIT", - "bugs": { - "url": "https://github.com/patternfly/patternfly-react/issues" - }, - "homepage": "https://github.com/patternfly/patternfly-react/tree/main/packages/react-log-viewer#readme", - "scripts": { - "clean": "rimraf dist" - }, - "dependencies": { - "@patternfly/react-core": "^4.267.6", - "@patternfly/react-icons": "^4.93.3", - "@patternfly/react-styles": "^4.92.3", - "memoize-one": "^5.1.0", - "resize-observer-polyfill": "^1.5.1" - }, - "peerDependencies": { - "react": "^16.8 || ^17 || ^18", - "react-dom": "^16.8 || ^17 || ^18" - }, - "devDependencies": { - "rimraf": "^2.6.2", - "typescript": "^4.7.4" - } -} diff --git a/packages/react-log-viewer/src/LogViewer/LogViewer.tsx b/packages/react-log-viewer/src/LogViewer/LogViewer.tsx deleted file mode 100644 index c5088267332..00000000000 --- a/packages/react-log-viewer/src/LogViewer/LogViewer.tsx +++ /dev/null @@ -1,314 +0,0 @@ -import React, { useState, useEffect, memo } from 'react'; -import { LogViewerContext, LogViewerToolbarContext } from './LogViewerContext'; -import { css } from '@patternfly/react-styles'; -import { LogViewerRow } from './LogViewerRow'; -import { parseConsoleOutput, searchedKeyWordType, stripAnsi } from './utils/utils'; -import { VariableSizeList as List, areEqual } from '../react-window'; -import styles from '@patternfly/react-styles/css/components/LogViewer/log-viewer'; -import AnsiUp from '../ansi_up/ansi_up'; - -interface LogViewerProps { - /** String or String Array data being sent by the consumer*/ - data?: string | string[]; - /** Consumer may turn off the visibility on the toolbar */ - hasToolbar?: boolean; - /** Flag to enable or disable line numbers on the log viewer. */ - hasLineNumbers?: boolean; - /** Width of the log viewer. */ - width?: number | string; - /** Height of the log viewer. */ - height?: number | string; - /** Rows rendered outside of view. The more rows are rendered, the higher impact on performance */ - overScanCount?: number; - /** Toolbar rendered in the log viewer header */ - toolbar?: React.ReactNode; - /** Content displayed while the log viewer is loading */ - loadingContent?: React.ReactNode; - /** Flag indicating that log viewer is dark themed */ - theme?: 'dark' | 'light'; - /** Row index to scroll to */ - scrollToRow?: number; - /** The width of index when the line numbers is shown, set by char numbers */ - initialIndexWidth?: number; - /** Number of rows to display in the log viewer */ - itemCount?: number; - /** Flag indicating that log viewer is wrapping text or not */ - isTextWrapped?: boolean; - /** Component rendered in the log viewer console window header */ - header?: React.ReactNode; - /** Component rendered in the log viewer console window footer */ - footer?: React.ReactNode; - /** Callback function when scrolling the window. - * scrollDirection is the direction of scroll, could be 'forward'|'backward'. - * scrollOffset and scrollOffsetToBottom are the offset of the current position to the top or the bottom. - * scrollUpdateWasRequested is false when the scroll event is cause by the user interaction in the browser, else it's true. - * @example onScroll={({scrollDirection, scrollOffset, scrollOffsetToBottom, scrollUpdateWasRequested})=>{}} - */ - onScroll?: ({ - scrollDirection, - scrollOffset, - scrollOffsetToBottom, - scrollUpdateWasRequested - }: { - scrollDirection: 'forward' | 'backward'; - scrollOffset: number; - scrollOffsetToBottom: number; - scrollUpdateWasRequested: boolean; - }) => void; - /** Forwarded ref */ - innerRef?: React.RefObject; -} - -let canvas: HTMLCanvasElement | undefined; - -const getCharNums = (windowWidth: number, font: string) => { - // if given, use cached canvas for better performance - // else, create new canvas - canvas = canvas || document.createElement('canvas'); - const context = canvas.getContext('2d'); - context.font = font; - const oneChar = context.measureText('a'); - return Math.floor(windowWidth / oneChar.width); -}; - -const LogViewerBase: React.FunctionComponent = memo( - ({ - data = '', - hasLineNumbers = true, - height = 600, - overScanCount = 10, - loadingContent = '', - toolbar, - width, - theme = 'light', - scrollToRow = 0, - itemCount = undefined, - header, - footer, - onScroll, - innerRef, - isTextWrapped = true, - initialIndexWidth, - ...props - }: LogViewerProps) => { - const [searchedInput, setSearchedInput] = useState(''); - const [rowInFocus, setRowInFocus] = useState({ rowIndex: scrollToRow, matchIndex: 0 }); - const [searchedWordIndexes, setSearchedWordIndexes] = useState([]); - const [currentSearchedItemCount, setCurrentSearchedItemCount] = useState(0); - const [lineHeight, setLineHeight] = useState(0); - const [charNumsPerLine, setCharNumsPerLine] = useState(0); - const [indexWidth, setIndexWidth] = useState(0); - const [resizing, setResizing] = useState(false); - const [loading, setLoading] = useState(true); - const [listKey, setListKey] = useState(1); - - /* Parse data every time it changes */ - const parsedData = React.useMemo(() => parseConsoleOutput(data), [data]); - - const ansiUp = new AnsiUp(); - - const ref = React.useRef(); - const logViewerRef = innerRef || ref; - const containerRef = React.useRef(); - let resizeTimer = null as any; - - useEffect(() => { - if (containerRef && containerRef.current) { - window.addEventListener('resize', callbackResize); - setLoading(false); - createDummyElements(); - ansiUp.resetStyles(); - } - return () => window.removeEventListener('resize', callbackResize); - }, [containerRef.current]); - - const callbackResize = () => { - if (!resizing) { - setResizing(true); - } - if (resizeTimer) { - clearTimeout(resizeTimer); - } - resizeTimer = setTimeout(() => { - setResizing(false); - createDummyElements(); - }, 100); - }; - - useEffect(() => { - setLoading(resizing); - }, [resizing]); - - const dataToRender = React.useMemo( - () => ({ - parsedData, - logViewerRef, - rowInFocus, - searchedWordIndexes - }), - [parsedData, logViewerRef, rowInFocus, searchedWordIndexes] - ); - - useEffect(() => { - if (logViewerRef && logViewerRef.current) { - logViewerRef.current.resetAfterIndex(0); - } - }, [parsedData]); - - useEffect(() => { - if (scrollToRow && parsedData.length) { - setRowInFocus({ rowIndex: scrollToRow, matchIndex: 0 }); - // only in this way (setTimeout) the scrollToItem will work - setTimeout(() => { - if (logViewerRef && logViewerRef.current) { - logViewerRef.current.scrollToItem(scrollToRow, 'center'); - } - }, 1); - } - }, [parsedData, scrollToRow]); - - const createDummyElements = () => { - // create dummy elements - const dummyIndex = document.createElement('span'); - dummyIndex.className = css(styles.logViewerIndex); - const dummyText = document.createElement('span'); - dummyText.className = css(styles.logViewerText); - const dummyListItem = document.createElement('div'); - dummyListItem.className = css(styles.logViewerListItem); - const dummyList = document.createElement('div'); - dummyList.className = css(styles.logViewerList); - // append dummy elements - dummyListItem.appendChild(dummyIndex); - dummyListItem.appendChild(dummyText); - dummyList.appendChild(dummyListItem); - containerRef.current.appendChild(dummyList); - // compute styles - const dummyIndexStyles = getComputedStyle(dummyIndex); - const dummyTextStyles = getComputedStyle(dummyText); - setLineHeight(parseFloat(dummyTextStyles.lineHeight)); - const lineWidth = hasLineNumbers - ? (containerRef.current as HTMLDivElement).clientWidth - - (parseFloat(dummyTextStyles.paddingLeft) + - parseFloat(dummyTextStyles.paddingRight) + - parseFloat(dummyIndexStyles.width)) - : (containerRef.current as HTMLDivElement).clientWidth - - (parseFloat(dummyTextStyles.paddingLeft) + parseFloat(dummyTextStyles.paddingRight)); - const charNumsPerLine = getCharNums( - lineWidth, - `${dummyTextStyles.fontWeight} ${dummyTextStyles.fontSize} ${dummyTextStyles.fontFamily}` - ); - setCharNumsPerLine(charNumsPerLine); - setIndexWidth(parseFloat(dummyIndexStyles.width)); - // remove dummy elements from the DOM tree - containerRef.current.removeChild(dummyList); - setListKey(listKey => listKey + 1); - }; - - const scrollToRowInFocus = (searchedRowIndex: searchedKeyWordType) => { - setRowInFocus(searchedRowIndex); - logViewerRef.current.scrollToItem(searchedRowIndex.rowIndex, 'center'); - // use this method to scroll to the right - // if the keyword is out of the window when wrapping text - if (!isTextWrapped) { - setTimeout(() => { - const element = containerRef.current.querySelector('.pf-c-log-viewer__string.pf-m-current'); - element && element.scrollIntoView({ block: 'nearest', inline: 'center' }); - }, 1); - } - }; - - useEffect(() => { - setListKey(listKey => listKey + 1); - }, [isTextWrapped]); - - const guessRowHeight = (rowIndex: number) => { - if (!isTextWrapped) { - return lineHeight; - } - // strip ansi escape code before estimate the row height - const rowText = stripAnsi(parsedData[rowIndex]); - // get the row numbers of the current text - const numRows = Math.ceil(rowText.length / charNumsPerLine); - // multiply by line height to get the total height - return lineHeight * (numRows || 1); - }; - - const createList = (parsedData: string[]) => ( - - {LogViewerRow} - - ); - - return ( - -
- {toolbar && ( - -
{toolbar}
-
- )} - {header} -
- {loading ?
{loadingContent}
: createList(parsedData)} -
- {footer} -
-
- ); - }, - areEqual -); - -export const LogViewer = React.forwardRef((props: LogViewerProps, ref: React.Ref) => ( - } {...props} /> -)); - -LogViewer.displayName = 'LogViewer'; diff --git a/packages/react-log-viewer/src/LogViewer/LogViewerContext.tsx b/packages/react-log-viewer/src/LogViewer/LogViewerContext.tsx deleted file mode 100644 index 87a73c81e91..00000000000 --- a/packages/react-log-viewer/src/LogViewer/LogViewerContext.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { createContext, useContext } from 'react'; -import { searchedKeyWordType } from './utils/utils'; - -export const useLogViewerContext = () => useContext(LogViewerContext); - -interface LogViewerContextInterface { - parsedData: string[]; - searchedInput: string; -} - -export const LogViewerContext = createContext(null); - -interface LogViewerToolbarContextProps { - searchedWordIndexes: searchedKeyWordType[]; - rowInFocus: searchedKeyWordType; - searchedInput: string; - itemCount: number; - currentSearchedItemCount: number; - scrollToRow: (searchedRow: searchedKeyWordType) => void; - setRowInFocus: (index: searchedKeyWordType) => void; - setSearchedInput: (input: string) => void; - setSearchedWordIndexes: (indexes: searchedKeyWordType[]) => void; - setCurrentSearchedItemCount: (index: number) => void; -} - -export const LogViewerToolbarContext = createContext(null); diff --git a/packages/react-log-viewer/src/LogViewer/LogViewerRow.tsx b/packages/react-log-viewer/src/LogViewer/LogViewerRow.tsx deleted file mode 100644 index 5d72a5c1631..00000000000 --- a/packages/react-log-viewer/src/LogViewer/LogViewerRow.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import React, { memo, useContext } from 'react'; -import ReactDOMServer from 'react-dom/server'; -import { LOGGER_LINE_NUMBER_INDEX_DELTA } from './utils/constants'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/LogViewer/log-viewer'; -import { LogViewerContext } from './LogViewerContext'; -import AnsiUp from '../ansi_up/ansi_up'; -import { escapeString, escapeTextForHtml, isAnsi, searchedKeyWordType, splitAnsi } from './utils/utils'; - -interface LogViewerRowProps { - index: number; - style?: React.CSSProperties; - data: { - parsedData: string[] | null; - rowInFocus: searchedKeyWordType; - searchedWordIndexes: searchedKeyWordType[]; - }; - ansiUp: AnsiUp; -} - -export const LogViewerRow: React.FunctionComponent = memo(({ index, style, data, ansiUp }) => { - const { parsedData, searchedWordIndexes, rowInFocus } = data; - const context = useContext(LogViewerContext); - - const getData = (index: number): string => (parsedData ? parsedData[index] : null); - - const getRowIndex = (index: number): number => index + LOGGER_LINE_NUMBER_INDEX_DELTA; - - /** Helper function for applying the correct styling for styling rows containing searched keywords */ - const handleHighlight = (matchCounter: number) => { - const searchedWordResult = searchedWordIndexes.filter(searchedWord => searchedWord.rowIndex === index); - if (searchedWordResult.length !== 0) { - if (rowInFocus.rowIndex === index && rowInFocus.matchIndex === matchCounter) { - return styles.modifiers.current; - } - return styles.modifiers.match; - } - return ''; - }; - - const getFormattedData = () => { - const rowText = getData(index); - let matchCounter = 0; - if (context.searchedInput) { - const splitAnsiString = splitAnsi(rowText); - const regEx = new RegExp(`(${escapeString(context.searchedInput)})`, 'ig'); - const composedString: string[] = []; - splitAnsiString.forEach(str => { - matchCounter = 0; - if (isAnsi(str)) { - composedString.push(str); - } else { - const splitString = str.split(regEx); - splitString.forEach((substr, newIndex) => { - if (substr.match(regEx)) { - matchCounter += 1; - composedString.push( - ReactDOMServer.renderToString( - - {substr} - - ) - ); - } else { - composedString.push(escapeTextForHtml(substr)); - } - }); - } - }); - return composedString.join(''); - } - return escapeTextForHtml(rowText); - }; - - return ( -
- {getRowIndex(index)} - -
- ); -}); -LogViewerRow.displayName = 'LogViewerRow'; diff --git a/packages/react-log-viewer/src/LogViewer/LogViewerSearch.tsx b/packages/react-log-viewer/src/LogViewer/LogViewerSearch.tsx deleted file mode 100644 index df57e088a3d..00000000000 --- a/packages/react-log-viewer/src/LogViewer/LogViewerSearch.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import React, { useContext, useEffect, useState } from 'react'; -import { - NUMBER_INDEX_DELTA, - DEFAULT_FOCUS, - DEFAULT_INDEX, - DEFAULT_SEARCH_INDEX, - DEFAULT_MATCH -} from './utils/constants'; -import { SearchInput, SearchInputProps } from '@patternfly/react-core'; -import { LogViewerToolbarContext, LogViewerContext } from './LogViewerContext'; -import { escapeString, searchForKeyword, searchedKeyWordType } from './utils/utils'; - -export interface LogViewerSearchProps extends SearchInputProps { - /** Place holder text inside of searchbar */ - placeholder: string; - /** Minimum number of characters required for searching */ - minSearchChars: number; -} - -export const LogViewerSearch: React.FunctionComponent = ({ - placeholder = 'Search', - minSearchChars = 1, - ...props -}) => { - const [indexAdjuster, setIndexAdjuster] = useState(0); - const { - searchedWordIndexes, - scrollToRow, - setSearchedInput, - setCurrentSearchedItemCount, - setRowInFocus, - setSearchedWordIndexes, - currentSearchedItemCount, - searchedInput, - itemCount - } = useContext(LogViewerToolbarContext); - - const { parsedData } = useContext(LogViewerContext); - - const defaultRowInFocus = { rowIndex: DEFAULT_FOCUS, matchIndex: DEFAULT_MATCH }; - - /* Defaulting the first focused row that contain searched keywords */ - useEffect(() => { - if (hasFoundResults) { - setIndexAdjuster(1); - } else { - setIndexAdjuster(0); - } - }, [searchedWordIndexes]); - - /* Updating searchedResults context state given changes in searched input */ - useEffect(() => { - let foundKeywordIndexes: (searchedKeyWordType | null)[] = []; - const adjustedSearchedInput = escapeString(searchedInput); - - if (adjustedSearchedInput !== '' && adjustedSearchedInput.length >= minSearchChars) { - foundKeywordIndexes = searchForKeyword(adjustedSearchedInput, parsedData, itemCount || parsedData.length); - - if (foundKeywordIndexes.length !== 0) { - setSearchedWordIndexes(foundKeywordIndexes); - scrollToRow(foundKeywordIndexes[DEFAULT_SEARCH_INDEX]); - setCurrentSearchedItemCount(DEFAULT_INDEX); - } - } - - if (!adjustedSearchedInput) { - setRowInFocus(defaultRowInFocus); - } - }, [searchedInput]); - - const hasFoundResults = searchedWordIndexes.length > 0 && searchedWordIndexes[0]?.rowIndex !== -1; - - /* Clearing out the search input */ - const handleClear = (): void => { - setSearchedInput(''); - setCurrentSearchedItemCount(DEFAULT_INDEX); - setSearchedWordIndexes([]); - setRowInFocus(defaultRowInFocus); - }; - - /* Moving focus over to next row containing searched word */ - const handleNextSearchItem = (): void => { - const adjustedSearchedItemCount = (currentSearchedItemCount + NUMBER_INDEX_DELTA) % searchedWordIndexes.length; - - setCurrentSearchedItemCount(adjustedSearchedItemCount); - scrollToRow(searchedWordIndexes[adjustedSearchedItemCount]); - }; - - /* Moving focus over to next row containing searched word */ - const handlePrevSearchItem = (): void => { - let adjustedSearchedItemCount = currentSearchedItemCount - NUMBER_INDEX_DELTA; - - if (adjustedSearchedItemCount < DEFAULT_INDEX) { - adjustedSearchedItemCount += searchedWordIndexes.length; - } - - setCurrentSearchedItemCount(adjustedSearchedItemCount); - scrollToRow(searchedWordIndexes[adjustedSearchedItemCount]); - }; - - return ( - { - props.onChange && props.onChange(input, event); - setSearchedInput(input); - }} - onNextClick={event => { - props.onNextClick && props.onNextClick(event); - handleNextSearchItem(); - }} - onPreviousClick={event => { - props.onPreviousClick && props.onPreviousClick(event); - handlePrevSearchItem(); - }} - onClear={event => { - props.onClear && props.onClear(event); - handleClear(); - }} - /> - ); -}; -LogViewerSearch.displayName = 'LogViewerSearch'; diff --git a/packages/react-log-viewer/src/LogViewer/demos/LogViewer.md b/packages/react-log-viewer/src/LogViewer/demos/LogViewer.md deleted file mode 100644 index 66ef695619b..00000000000 --- a/packages/react-log-viewer/src/LogViewer/demos/LogViewer.md +++ /dev/null @@ -1,272 +0,0 @@ ---- -id: Log viewer -beta: true -section: extensions ---- - -import { LogViewer, LogViewerSearch } from '@patternfly/react-log-viewer'; -import { -Badge, -Button, -Select, -SelectOption, -PageSection, -PageSectionVariants, -Tooltip, -Toolbar, -ToolbarContent, -ToolbarGroup, -ToolbarItem, -ToolbarToggleGroup -} from '@patternfly/react-core'; -import { data } from '../examples/realTestData.js'; -import { OutlinedPlayCircleIcon } from '@patternfly/react-icons'; -import ExpandIcon from '@patternfly/react-icons/dist/esm/icons/expand-icon'; -import PauseIcon from '@patternfly/react-icons/dist/esm/icons/pause-icon'; -import DownloadIcon from '@patternfly/react-icons/dist/esm/icons/download-icon'; -import PlayIcon from '@patternfly/react-icons/dist/esm/icons/play-icon'; -import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon'; - -### With complex toolbar - -```js -import React from 'react'; -import { data } from './realTestData'; -import { LogViewer, LogViewerSearch } from '@patternfly/react-log-viewer'; -import { - Badge, - Button, - Select, - SelectOption, - Tooltip, - Toolbar, - ToolbarContent, - ToolbarGroup, - ToolbarItem, - ToolbarToggleGroup -} from '@patternfly/react-core'; -import OutlinedPlayCircleIcon from '@patternfly/react-icons/dist/esm/icons/outlined-play-circle-icon'; -import ExpandIcon from '@patternfly/react-icons/dist/esm/icons/expand-icon'; -import PauseIcon from '@patternfly/react-icons/dist/esm/icons/pause-icon'; -import PlayIcon from '@patternfly/react-icons/dist/esm/icons/play-icon'; -import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon'; -import DownloadIcon from '@patternfly/react-icons/dist/esm/icons/download-icon'; - -ComplexToolbarLogViewer = () => { - const dataSources = { - 'container-1': { type: 'C', id: 'data1' }, - 'container-2': { type: 'D', id: 'data2' }, - 'container-3': { type: 'E', id: 'data3' } - }; - const [isPaused, setIsPaused] = React.useState(false); - const [isFullScreen, setIsFullScreen] = React.useState(false); - const [itemCount, setItemCount] = React.useState(1); - const [currentItemCount, setCurrentItemCount] = React.useState(0); - const [renderData, setRenderData] = React.useState(''); - const [selectedDataSource, setSelectedDataSource] = React.useState('container-1'); - const [selectDataSourceOpen, setSelectDataSourceOpen] = React.useState(false); - const [timer, setTimer] = React.useState(null); - const [selectedData, setSelectedData] = React.useState(data[dataSources[selectedDataSource].id].split('\n')); - const [buffer, setBuffer] = React.useState([]); - const [linesBehind, setLinesBehind] = React.useState(0); - const logViewerRef = React.useRef(); - - React.useEffect(() => { - setTimer( - window.setInterval(() => { - setItemCount(itemCount => itemCount + 1); - }, 500) - ); - return () => { - window.clearInterval(timer); - }; - }, []); - - React.useEffect(() => { - if (itemCount > selectedData.length) { - window.clearInterval(timer); - } else { - setBuffer(selectedData.slice(0, itemCount)); - } - }, [itemCount]); - - React.useEffect(() => { - if (!isPaused && buffer.length > 0) { - setCurrentItemCount(buffer.length); - setRenderData(buffer.join('\n')); - if (logViewerRef && logViewerRef.current) { - logViewerRef.current.scrollToBottom(); - } - } else if (buffer.length !== currentItemCount) { - setLinesBehind(buffer.length - currentItemCount); - } else { - setLinesBehind(0); - } - }, [isPaused, buffer]); - - const onExpandClick = event => { - const element = document.querySelector('#complex-toolbar-demo'); - - if (!isFullScreen) { - if (element.requestFullscreen) { - element.requestFullscreen(); - } else if (element.mozRequestFullScreen) { - element.mozRequestFullScreen(); - } else if (element.webkitRequestFullScreen) { - element.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); - } - setIsFullScreen(true); - } else { - if (document.exitFullscreen) { - document.exitFullscreen(); - } else if (document.webkitExitFullscreen) { - /* Safari */ - document.webkitExitFullscreen(); - } else if (document.msExitFullscreen) { - /* IE11 */ - document.msExitFullscreen(); - } - setIsFullScreen(false); - } - }; - - const onDownloadClick = () => { - const element = document.createElement('a'); - const dataToDownload = [data[dataSources[selectedDataSource].id]]; - const file = new Blob(dataToDownload, { type: 'text/plain' }); - element.href = URL.createObjectURL(file); - element.download = `${selectedDataSource}.txt`; - document.body.appendChild(element); - element.click(); - document.body.removeChild(element); - }; - - const onScroll = ({ scrollOffsetToBottom, scrollDirection, scrollUpdateWasRequested }) => { - if (!scrollUpdateWasRequested) { - if (scrollOffsetToBottom > 0) { - setIsPaused(true); - } else { - setIsPaused(false); - } - } - }; - - const selectDataSourceMenu = Object.entries(dataSources).map(([value, { type }]) => ( - - {type} - {` ${value}`} - - )); - - const selectDataSourcePlaceholder = ( - - {dataSources[selectedDataSource].type} - {` ${selectedDataSource}`} - - ); - - const ControlButton = () => { - return ( - - ); - }; - - const leftAlignedToolbarGroup = ( - - } breakpoint="md"> - - - - - setIsPaused(true)} placeholder="Search" /> - - - - - - - ); - - const rightAlignedToolbarGroup = ( - - - - Download}> - - - - - Expand}> - - - - - - ); - - const FooterButton = () => { - const handleClick = e => { - setIsPaused(false); - }; - return ( - - ); - }; - return ( - - - {leftAlignedToolbarGroup} - {rightAlignedToolbarGroup} - - - } - overScanCount={10} - footer={isPaused && } - onScroll={onScroll} - /> - ); -}; -``` diff --git a/packages/react-log-viewer/src/LogViewer/examples/LogViewer.md b/packages/react-log-viewer/src/LogViewer/examples/LogViewer.md deleted file mode 100644 index 6bbe479c54c..00000000000 --- a/packages/react-log-viewer/src/LogViewer/examples/LogViewer.md +++ /dev/null @@ -1,201 +0,0 @@ ---- -id: Log viewer -beta: true -section: extensions -propComponents: [LogViewer, LogViewerSearch] ---- - -import { LogViewer, LogViewerSearch, LogViewerContext } from '@patternfly/react-log-viewer'; -import { Button, Checkbox, Toolbar, ToolbarContent, ToolbarItem } from '@patternfly/react-core'; -import { data } from './realTestData.js'; - -## Examples - -### Basic - -```js -import React from 'react'; -import { data } from './realTestData.js'; -import { LogViewer } from '@patternfly/react-log-viewer'; -import { Checkbox } from '@patternfly/react-core'; - -BasicLogViewer = () => { - const [isDarkTheme, setIsDarkTheme] = React.useState(false); - - return ( - - - - - ); -}; -``` - -### With line number chars specified - -```js -import React from 'react'; -import { data } from './realTestData.js'; -import { LogViewer } from '@patternfly/react-log-viewer'; - -LineNumberCharsSpecifiedLogViewer = () => { - return ( - - ); -}; -``` - -### With search - -```js -import React from 'react'; -import { data } from './realTestData'; -import { LogViewer, LogViewerSearch } from '@patternfly/react-log-viewer'; -import { Toolbar, ToolbarContent, ToolbarItem } from '@patternfly/react-core'; - -BasicSearchLogViewer = () => { - return ( - - - - - - - - } - /> - ); -}; -``` - -### With complex toolbar - -```js -import React from 'react'; -import { data } from './realTestData'; -import { LogViewer, LogViewerSearch } from '@patternfly/react-log-viewer'; -import { Toolbar, ToolbarContent, ToolbarItem, Button, Checkbox } from '@patternfly/react-core'; - -CustomControlLogViewer = () => { - const [isTextWrapped, setIsTextWrapped] = React.useState(false); - const onActionClick = event => { - console.log('clicked test action button'); - }; - - const onPrintClick = event => { - console.log('clicked console print button'); - }; - - return ( - - - - - - - - - - - - - - - - - } - /> - ); -}; -``` - -### With header component - -```js -import React from 'react'; -import { data } from './realTestData.js'; -import { LogViewer } from '@patternfly/react-log-viewer'; -import { Banner } from '@patternfly/react-core'; - -HeaderComponentLogViewer = () => { - return ( - 5019 lines} - /> - ); -}; -``` - -### With footer component - -```js -import React from 'react'; -import { data } from './realTestData.js'; -import { LogViewer, LogViewerContext } from '@patternfly/react-log-viewer'; -import { Button } from '@patternfly/react-core'; - -FooterComponentLogViewer = () => { - const logViewerRef = React.useRef(); - const FooterButton = () => { - const handleClick = e => { - logViewerRef.current.scrollToBottom(); - }; - return ; - }; - - return ( - } - /> - ); -}; -``` - -### With ANSI color logs - -```js -import React from 'react'; -import { data } from './realTestData.js'; -import { LogViewer } from '@patternfly/react-log-viewer'; - -FooterComponentLogViewer = () => { - return ( - - ); -}; -``` \ No newline at end of file diff --git a/packages/react-log-viewer/src/LogViewer/examples/realTestData.js b/packages/react-log-viewer/src/LogViewer/examples/realTestData.js deleted file mode 100644 index 682592cbedc..00000000000 --- a/packages/react-log-viewer/src/LogViewer/examples/realTestData.js +++ /dev/null @@ -1,10 +0,0 @@ -export const data = { - data: `Copying system trust bundle\nWaiting for port :6443 to be released.\nI0223 20:04:25.084507 1 loader.go:379] Config loaded from file: /etc/kubernetes/static-pod-resources/configmaps/kube-apiserver-cert-syncer-kubeconfig/kubeconfig\nCopying termination logs to "/var/log/kube-apiserver/termination.log"\nI0223 20:04:25.087543 1 main.go:124] Touching termination lock file "/var/log/kube-apiserver/.terminating"\nI0223 20:04:25.088797 1 main.go:182] Launching sub-process "/usr/bin/hyperkube kube-apiserver --openshift-config=/etc/kubernetes/static-pod-resources/configmaps/config/config.yaml --advertise-address=10.0.171.12 -v=2 --permit-address-sharing"\nFlag --openshift-config has been deprecated, to be removed\n\nI0223 20:04:25.238681 17 plugins.go:84] Registered admission plugin "authorization.openshift.io/RestrictSubjectBindings"\nI0223 20:04:25.238763 17 plugins.go:84] Registered admission plugin "image.openshift.io/ImagePolicy"\nI0223 20:04:25.238775 17 plugins.go:84] Registered admission plugin "route.openshift.io/IngressAdmission"\nI0223 20:04:25.238783 17 plugins.go:84] Registered admission plugin "scheduling.openshift.io/OriginPodNodeEnvironment"\nI0223 20:04:25.238792 17 plugins.go:84] Registered admission plugin "autoscaling.openshift.io/ClusterResourceOverride"\nI0223 20:04:25.238801 17 plugins.go:84] Registered admission plugin "quota.openshift.io/ClusterResourceQuota"\nI0223 20:04:25.238810 17 plugins.go:84] Registered admission plugin "autoscaling.openshift.io/RunOnceDuration"\nI0223 20:04:25.238819 17 plugins.go:84] Registered admission plugin "scheduling.openshift.io/PodNodeConstraints"\nI0223 20:04:25.238829 17 plugins.go:84] Registered admission plugin "security.openshift.io/SecurityContextConstraint"\nI0223 20:04:25.238838 17 plugins.go:84] Registered admission plugin "security.openshift.io/SCCExecRestrictions"\nI0223 20:04:25.238846 17 plugins.go:84] Registered admission plugin "network.openshift.io/ExternalIPRanger"\nI0223 20:04:25.238856 17 plugins.go:84] Registered admission plugin "network.openshift.io/RestrictedEndpointsAdmission"\nI0223 20:04:25.238873 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateAPIServer"\nI0223 20:04:25.238883 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateAuthentication"\nI0223 20:04:25.238892 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateFeatureGate"\nI0223 20:04:25.238952 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateConsole"\nI0223 20:04:25.238966 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateImage"\nI0223 20:04:25.238975 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateOAuth"\nI0223 20:04:25.238991 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateProject"\nI0223 20:04:25.239003 17 plugins.go:84] Registered admission plugin "config.openshift.io/DenyDeleteClusterConfiguration"\nI0223 20:04:25.239014 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateScheduler"\nI0223 20:04:25.239025 17 plugins.go:84] Registered admission plugin "quota.openshift.io/ValidateClusterResourceQuota"\nI0223 20:04:25.239035 17 plugins.go:84] Registered admission plugin "security.openshift.io/ValidateSecurityContextConstraints"\nI0223 20:04:25.239046 17 plugins.go:84] Registered admission plugin "authorization.openshift.io/ValidateRoleBindingRestriction"\nI0223 20:04:25.239056 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateNetwork"\nI0223 20:04:25.239065 17 plugins.go:84] Registered admission plugin "security.openshift.io/DefaultSecurityContextConstraints"\nI0223 20:04:25.243294 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true]}\nI0223 20:04:25.243381 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true RotateKubeletServerCertificate:true]}\nW0223 20:04:25.243488 17 feature_gate.go:236] Setting GA feature gate SupportPodPidsLimit=true. It will be removed in a future release.\nI0223 20:04:25.243540 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true RotateKubeletServerCertificate:true SupportPodPidsLimit:true]}\nI0223 20:04:25.243629 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true NodeDisruptionExclusion:true RotateKubeletServerCertificate:true SupportPodPidsLimit:true]}\nI0223 20:04:25.243709 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true NodeDisruptionExclusion:true RotateKubeletServerCertificate:true ServiceNodeExclusion:true SupportPodPidsLimit:true]}\nW0223 20:04:25.243803 17 feature_gate.go:236] Setting GA feature gate SCTPSupport=true. It will be removed in a future release.\nI0223 20:04:25.243846 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true NodeDisruptionExclusion:true RotateKubeletServerCertificate:true SCTPSupport:true ServiceNodeExclusion:true SupportPodPidsLimit:true]}\nI0223 20:04:25.243962 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true LegacyNodeRoleBehavior:false NodeDisruptionExclusion:true RotateKubeletServerCertificate:true SCTPSupport:true ServiceNodeExclusion:true SupportPodPidsLimit:true]}\nFlag --openshift-config has been deprecated, to be removed\nFlag --enable-logs-handler has been deprecated, This flag will be removed in v1.19\nFlag --enable-swagger-ui has been deprecated, swagger 1.2 support has been removed\nFlag --insecure-port has been deprecated, This flag has no effect now and will be removed in v1.24.\nFlag --kubelet-https has been deprecated, API Server connections to kubelets always use https. This flag will be removed in 1.22.\nFlag --kubelet-read-only-port has been deprecated, kubelet-read-only-port is deprecated and will be removed.\nI0223 20:04:25.244167 17 flags.go:59] FLAG: --add-dir-header="false"\nI0223 20:04:25.244184 17 flags.go:59] FLAG: --address="127.0.0.1"\nI0223 20:04:25.244196 17 flags.go:59] FLAG: --admission-control="[]"\nI0223 20:04:25.244213 17 flags.go:59] FLAG: --admission-control-config-file="/tmp/kubeapiserver-admission-config.yaml487454417"\nI0223 20:04:25.244224 17 flags.go:59] FLAG: --advertise-address="10.0.171.12"\nI0223 20:04:25.244234 17 flags.go:59] FLAG: --allow-privileged="true"\nI0223 20:04:25.244251 17 flags.go:59] FLAG: --alsologtostderr="false"\nI0223 20:04:25.244261 17 flags.go:59] FLAG: --anonymous-auth="true"\nI0223 20:04:25.244302 17 flags.go:59] FLAG: --api-audiences="[https://kubernetes.default.svc]"\nI0223 20:04:25.244317 17 flags.go:59] FLAG: --apiserver-count="1"\nI0223 20:04:25.244327 17 flags.go:59] FLAG: --audit-log-batch-buffer-size="10000"\nI0223 20:04:25.244336 17 flags.go:59] FLAG: --audit-log-batch-max-size="1"\nI0223 20:04:25.244343 17 flags.go:59] FLAG: --audit-log-batch-max-wait="0s"\nI0223 20:04:25.244354 17 flags.go:59] FLAG: --audit-log-batch-throttle-burst="0"\nI0223 20:04:25.244362 17 flags.go:59] FLAG: --audit-log-batch-throttle-enable="false"\nI0223 20:04:25.244371 17 flags.go:59] FLAG: --audit-log-batch-throttle-qps="0"\nI0223 20:04:25.244382 17 flags.go:59] FLAG: --audit-log-compress="false"\nI0223 20:04:25.244390 17 flags.go:59] FLAG: --audit-log-format="json"\nI0223 20:04:25.244398 17 flags.go:59] FLAG: --audit-log-maxage="0"\nI0223 20:04:25.244407 17 flags.go:59] FLAG: --audit-log-maxbackup="10"\nI0223 20:04:25.244414 17 flags.go:59] FLAG: --audit-log-maxsize="100"\nI0223 20:04:25.244423 17 flags.go:59] FLAG: --audit-log-mode="blocking"\nI0223 20:04:25.244430 17 flags.go:59] FLAG: --audit-log-path="/var/log/kube-apiserver/audit.log"\nI0223 20:04:25.244438 17 flags.go:59] FLAG: --audit-log-truncate-enabled="false"\nI0223 20:04:25.244445 17 flags.go:59] FLAG: --audit-log-truncate-max-batch-size="10485760"\nI0223 20:04:25.244458 17 flags.go:59] FLAG: --audit-log-truncate-max-event-size="102400"\nI0223 20:04:25.244466 17 flags.go:59] FLAG: --audit-log-version="audit.k8s.io/v1"\nI0223 20:04:25.244475 17 flags.go:59] FLAG: --audit-policy-file="/etc/kubernetes/static-pod-resources/configmaps/kube-apiserver-audit-policies/default.yaml"\nI0223 20:04:25.244490 17 flags.go:59] FLAG: --audit-webhook-batch-buffer-size="10000"\nI0223 20:04:25.244499 17 flags.go:59] FLAG: --audit-webhook-batch-initial-backoff="10s"\nI0223 20:04:25.244509 17 flags.go:59] FLAG: --audit-webhook-batch-max-size="400"\nI0223 20:04:25.244518 17 flags.go:59] FLAG: --audit-webhook-batch-max-wait="30s"\nI0223 20:04:25.244526 17 flags.go:59] FLAG: --audit-webhook-batch-throttle-burst="15"\nI0223 20:04:25.244533 17 flags.go:59] FLAG: --audit-webhook-batch-throttle-enable="true"\nI0223 20:04:25.244541 17 flags.go:59] FLAG: --audit-webhook-batch-throttle-qps="10"\nI0223 20:04:25.244550 17 flags.go:59] FLAG: --audit-webhook-config-file=""\nI0223 20:04:25.244558 17 flags.go:59] FLAG: --audit-webhook-initial-backoff="10s"\nI0223 20:04:25.244565 17 flags.go:59] FLAG: --audit-webhook-mode="batch"\nI0223 20:04:25.244573 17 flags.go:59] FLAG: --audit-webhook-truncate-enabled="false"\nI0223 20:04:25.244580 17 flags.go:59] FLAG: --audit-webhook-truncate-max-batch-size="10485760"\nI0223 20:04:25.244588 17 flags.go:59] FLAG: --audit-webhook-truncate-max-event-size="102400"\nI0223 20:04:25.244596 17 flags.go:59] FLAG: --audit-webhook-version="audit.k8s.io/v1"\nI0223 20:04:25.244604 17 flags.go:59] FLAG: --authentication-token-webhook-cache-ttl="2m0s"\nI0223 20:04:25.244613 17 flags.go:59] FLAG: --authentication-token-webhook-config-file=""\nI0223 20:04:25.244620 17 flags.go:59] FLAG: --authentication-token-webhook-version="v1beta1"\nI0223 20:04:25.244628 17 flags.go:59] FLAG: --authorization-mode="[Scope,SystemMasters,RBAC,Node]"\nI0223 20:04:25.244642 17 flags.go:59] FLAG: --authorization-policy-file=""\nI0223 20:04:25.244650 17 flags.go:59] FLAG: --authorization-webhook-cache-authorized-ttl="5m0s"\nI0223 20:04:25.244657 17 flags.go:59] FLAG: --authorization-webhook-cache-unauthorized-ttl="30s"\nI0223 20:04:25.244665 17 flags.go:59] FLAG: --authorization-webhook-config-file=""\nI0223 20:04:25.244672 17 flags.go:59] FLAG: --authorization-webhook-version="v1beta1"\nI0223 20:04:25.244680 17 flags.go:59] FLAG: --bind-address="0.0.0.0"\nI0223 20:04:25.244687 17 flags.go:59] FLAG: --cert-dir="/var/run/kubernetes"\nI0223 20:04:25.244695 17 flags.go:59] FLAG: --client-ca-file="/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt"\nI0223 20:04:25.244706 17 flags.go:59] FLAG: --cloud-config=""\nI0223 20:04:25.244713 17 flags.go:59] FLAG: --cloud-provider="aws"\nI0223 20:04:25.244720 17 flags.go:59] FLAG: --cloud-provider-gce-l7lb-src-cidrs="130.211.0.0/22,35.191.0.0/16"\nI0223 20:04:25.244732 17 flags.go:59] FLAG: --cloud-provider-gce-lb-src-cidrs="130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16"\nI0223 20:04:25.244743 17 flags.go:59] FLAG: --contention-profiling="false"\nI0223 20:04:25.244752 17 flags.go:59] FLAG: --cors-allowed-origins="[//127.0.0.1(:|$),//localhost(:|$)]"\nI0223 20:04:25.244764 17 flags.go:59] FLAG: --default-not-ready-toleration-seconds="300"\nI0223 20:04:25.244772 17 flags.go:59] FLAG: --default-unreachable-toleration-seconds="300"\nI0223 20:04:25.244780 17 flags.go:59] FLAG: --default-watch-cache-size="100"\nI0223 20:04:25.244788 17 flags.go:59] FLAG: --delete-collection-workers="1"\nI0223 20:04:25.244796 17 flags.go:59] FLAG: --deserialization-cache-size="0"\nI0223 20:04:25.244803 17 flags.go:59] FLAG: --disable-admission-plugins="[]"\nI0223 20:04:25.244816 17 flags.go:59] FLAG: --egress-selector-config-file=""\nI0223 20:04:25.244823 17 flags.go:59] FLAG: --enable-admission-plugins="[CertificateApproval,CertificateSigning,CertificateSubjectRestriction,DefaultIngressClass,DefaultStorageClass,DefaultTolerationSeconds,LimitRanger,MutatingAdmissionWebhook,NamespaceLifecycle,NodeRestriction,OwnerReferencesPermissionEnforcement,PersistentVolumeClaimResize,PersistentVolumeLabel,PodNodeSelector,PodTolerationRestriction,Priority,ResourceQuota,RuntimeClass,ServiceAccount,StorageObjectInUseProtection,TaintNodesByCondition,ValidatingAdmissionWebhook,authorization.openshift.io/RestrictSubjectBindings,authorization.openshift.io/ValidateRoleBindingRestriction,config.openshift.io/DenyDeleteClusterConfiguration,config.openshift.io/ValidateAPIServer,config.openshift.io/ValidateAuthentication,config.openshift.io/ValidateConsole,config.openshift.io/ValidateFeatureGate,config.openshift.io/ValidateImage,config.openshift.io/ValidateOAuth,config.openshift.io/ValidateProject,config.openshift.io/ValidateScheduler,image.openshift.io/ImagePolicy,network.openshift.io/ExternalIPRanger,network.openshift.io/RestrictedEndpointsAdmission,quota.openshift.io/ClusterResourceQuota,quota.openshift.io/ValidateClusterResourceQuota,route.openshift.io/IngressAdmission,scheduling.openshift.io/OriginPodNodeEnvironment,security.openshift.io/DefaultSecurityContextConstraints,security.openshift.io/SCCExecRestrictions,security.openshift.io/SecurityContextConstraint,security.openshift.io/ValidateSecurityContextConstraints]"\nI0223 20:04:25.244950 17 flags.go:59] FLAG: --enable-aggregator-routing="true"\nI0223 20:04:25.244965 17 flags.go:59] FLAG: --enable-bootstrap-token-auth="false"\nI0223 20:04:25.244973 17 flags.go:59] FLAG: --enable-garbage-collector="true"\nI0223 20:04:25.244981 17 flags.go:59] FLAG: --enable-logs-handler="false"\nI0223 20:04:25.244989 17 flags.go:59] FLAG: --enable-priority-and-fairness="true"\nI0223 20:04:25.244997 17 flags.go:59] FLAG: --enable-swagger-ui="true"\nI0223 20:04:25.245004 17 flags.go:59] FLAG: --encryption-provider-config=""\nI0223 20:04:25.245011 17 flags.go:59] FLAG: --endpoint-reconciler-type="lease"\nI0223 20:04:25.245035 17 flags.go:59] FLAG: --etcd-cafile="/etc/kubernetes/static-pod-resources/configmaps/etcd-serving-ca/ca-bundle.crt"\nI0223 20:04:25.245046 17 flags.go:59] FLAG: --etcd-certfile="/etc/kubernetes/static-pod-resources/secrets/etcd-client/tls.crt"\nI0223 20:04:25.245055 17 flags.go:59] FLAG: --etcd-compaction-interval="5m0s"\nI0223 20:04:25.245064 17 flags.go:59] FLAG: --etcd-count-metric-poll-period="1m0s"\nI0223 20:04:25.245071 17 flags.go:59] FLAG: --etcd-db-metric-poll-interval="30s"\nI0223 20:04:25.245079 17 flags.go:59] FLAG: --etcd-healthcheck-timeout="10s"\nI0223 20:04:25.245087 17 flags.go:59] FLAG: --etcd-keyfile="/etc/kubernetes/static-pod-resources/secrets/etcd-client/tls.key"\nI0223 20:04:25.245098 17 flags.go:59] FLAG: --etcd-prefix="kubernetes.io"\nI0223 20:04:25.245106 17 flags.go:59] FLAG: --etcd-servers="[https://10.0.137.156:2379,https://10.0.158.175:2379,https://10.0.171.12:2379,https://localhost:2379]"\nI0223 20:04:25.245150 17 flags.go:59] FLAG: --etcd-servers-overrides="[]"\nI0223 20:04:25.245167 17 flags.go:59] FLAG: --event-ttl="3h0m0s"\nI0223 20:04:25.245177 17 flags.go:59] FLAG: --experimental-encryption-provider-config=""\nI0223 20:04:25.245183 17 flags.go:59] FLAG: --experimental-logging-sanitization="false"\nI0223 20:04:25.245191 17 flags.go:59] FLAG: --external-hostname=""\nI0223 20:04:25.245198 17 flags.go:59] FLAG: --feature-gates="APIPriorityAndFairness=true,LegacyNodeRoleBehavior=false,NodeDisruptionExclusion=true,RotateKubeletServerCertificate=true,SCTPSupport=true,ServiceNodeExclusion=true,SupportPodPidsLimit=true"\nI0223 20:04:25.245234 17 flags.go:59] FLAG: --goaway-chance="0"\nI0223 20:04:25.245248 17 flags.go:59] FLAG: --help="false"\nI0223 20:04:25.245257 17 flags.go:59] FLAG: --http2-max-streams-per-connection="2000"\nI0223 20:04:25.245266 17 flags.go:59] FLAG: --identity-lease-duration-seconds="3600"\nI0223 20:04:25.245274 17 flags.go:59] FLAG: --identity-lease-renew-interval-seconds="10"\nI0223 20:04:25.245283 17 flags.go:59] FLAG: --insecure-bind-address="127.0.0.1"\nI0223 20:04:25.245292 17 flags.go:59] FLAG: --insecure-port="0"\nI0223 20:04:25.245300 17 flags.go:59] FLAG: --kubelet-certificate-authority="/etc/kubernetes/static-pod-resources/configmaps/kubelet-serving-ca/ca-bundle.crt"\nI0223 20:04:25.245314 17 flags.go:59] FLAG: --kubelet-client-certificate="/etc/kubernetes/static-pod-resources/secrets/kubelet-client/tls.crt"\nI0223 20:04:25.245325 17 flags.go:59] FLAG: --kubelet-client-key="/etc/kubernetes/static-pod-resources/secrets/kubelet-client/tls.key"\nI0223 20:04:25.245335 17 flags.go:59] FLAG: --kubelet-https="true"\nI0223 20:04:25.245343 17 flags.go:59] FLAG: --kubelet-port="10250"\nI0223 20:04:25.245354 17 flags.go:59] FLAG: --kubelet-preferred-address-types="[InternalIP]"\nI0223 20:04:25.245375 17 flags.go:59] FLAG: --kubelet-read-only-port="0"\nI0223 20:04:25.245384 17 flags.go:59] FLAG: --kubelet-timeout="5s"\nI0223 20:04:25.245392 17 flags.go:59] FLAG: --kubernetes-service-node-port="0"\nI0223 20:04:25.245403 17 flags.go:59] FLAG: --livez-grace-period="0s"\nI0223 20:04:25.245412 17 flags.go:59] FLAG: --log-backtrace-at=":0"\nI0223 20:04:25.245423 17 flags.go:59] FLAG: --log-dir=""\nI0223 20:04:25.245431 17 flags.go:59] FLAG: --log-file=""\nI0223 20:04:25.245439 17 flags.go:59] FLAG: --log-file-max-size="1800"\nI0223 20:04:25.245448 17 flags.go:59] FLAG: --log-flush-frequency="5s"\nI0223 20:04:25.245456 17 flags.go:59] FLAG: --logging-format="text"\nI0223 20:04:25.245465 17 flags.go:59] FLAG: --logtostderr="true"\nI0223 20:04:25.245473 17 flags.go:59] FLAG: --master-service-namespace="default"\nI0223 20:04:25.245481 17 flags.go:59] FLAG: --max-connection-bytes-per-sec="0"\nI0223 20:04:25.245489 17 flags.go:59] FLAG: --max-mutating-requests-inflight="1000"\nI0223 20:04:25.245497 17 flags.go:59] FLAG: --max-requests-inflight="3000"\nI0223 20:04:25.245505 17 flags.go:59] FLAG: --min-request-timeout="3600"\nI0223 20:04:25.245513 17 flags.go:59] FLAG: --oidc-ca-file=""\nI0223 20:04:25.245521 17 flags.go:59] FLAG: --oidc-client-id=""\nI0223 20:04:25.245529 17 flags.go:59] FLAG: --oidc-groups-claim=""\nI0223 20:04:25.245537 17 flags.go:59] FLAG: --oidc-groups-prefix=""\nI0223 20:04:25.245545 17 flags.go:59] FLAG: --oidc-issuer-url=""\nI0223 20:04:25.245552 17 flags.go:59] FLAG: --oidc-required-claim=""\nI0223 20:04:25.245568 17 flags.go:59] FLAG: --oidc-signing-algs="[RS256]"\nI0223 20:04:25.245579 17 flags.go:59] FLAG: --oidc-username-claim="sub"\nI0223 20:04:25.245588 17 flags.go:59] FLAG: --oidc-username-prefix=""\nI0223 20:04:25.245596 17 flags.go:59] FLAG: --one-output="false"\nI0223 20:04:25.245604 17 flags.go:59] FLAG: --openshift-config="/etc/kubernetes/static-pod-resources/configmaps/config/config.yaml"\nI0223 20:04:25.245617 17 flags.go:59] FLAG: --permit-address-sharing="true"\nI0223 20:04:25.245626 17 flags.go:59] FLAG: --permit-port-sharing="false"\nI0223 20:04:25.245633 17 flags.go:59] FLAG: --port="0"\nI0223 20:04:25.245642 17 flags.go:59] FLAG: --profiling="true"\nI0223 20:04:25.245650 17 flags.go:59] FLAG: --proxy-client-cert-file="/etc/kubernetes/static-pod-certs/secrets/aggregator-client/tls.crt"\nI0223 20:04:25.245661 17 flags.go:59] FLAG: --proxy-client-key-file="/etc/kubernetes/static-pod-certs/secrets/aggregator-client/tls.key"\nI0223 20:04:25.245671 17 flags.go:59] FLAG: --request-timeout="1m0s"\nI0223 20:04:25.245680 17 flags.go:59] FLAG: --requestheader-allowed-names="[kube-apiserver-proxy,system:kube-apiserver-proxy,system:openshift-aggregator]"\nI0223 20:04:25.245698 17 flags.go:59] FLAG: --requestheader-client-ca-file="/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt"\nI0223 20:04:25.245709 17 flags.go:59] FLAG: --requestheader-extra-headers-prefix="[X-Remote-Extra-]"\nI0223 20:04:25.245719 17 flags.go:59] FLAG: --requestheader-group-headers="[X-Remote-Group]"\nI0223 20:04:25.245736 17 flags.go:59] FLAG: --requestheader-username-headers="[X-Remote-User]"\nI0223 20:04:25.245770 17 flags.go:59] FLAG: --runtime-config="flowcontrol.apiserver.k8s.io/v1alpha1=true"\nI0223 20:04:25.245787 17 flags.go:59] FLAG: --secure-port="6443"\nI0223 20:04:25.245795 17 flags.go:59] FLAG: --service-account-api-audiences="[https://kubernetes.default.svc]"\nI0223 20:04:25.245811 17 flags.go:59] FLAG: --service-account-extend-token-expiration="true"\nI0223 20:04:25.245820 17 flags.go:59] FLAG: --service-account-issuer="https://kubernetes.default.svc"\nI0223 20:04:25.245829 17 flags.go:59] FLAG: --service-account-jwks-uri="https://api-int.rhamilto.devcluster.openshift.com:6443/openid/v1/jwks"\nI0223 20:04:25.245838 17 flags.go:59] FLAG: --service-account-key-file="[/etc/kubernetes/static-pod-resources/configmaps/sa-token-signing-certs/service-account-001.pub,/etc/kubernetes/static-pod-resources/configmaps/sa-token-signing-certs/service-account-002.pub,/etc/kubernetes/static-pod-resources/configmaps/bound-sa-token-signing-certs/service-account-001.pub]"\nI0223 20:04:25.245862 17 flags.go:59] FLAG: --service-account-lookup="true"\nI0223 20:04:25.245871 17 flags.go:59] FLAG: --service-account-max-token-expiration="0s"\nI0223 20:04:25.245879 17 flags.go:59] FLAG: --service-account-signing-key-file="/etc/kubernetes/static-pod-certs/secrets/bound-service-account-signing-key/service-account.key"\nI0223 20:04:25.245893 17 flags.go:59] FLAG: --service-cluster-ip-range="172.30.0.0/16"\nI0223 20:04:25.245901 17 flags.go:59] FLAG: --service-node-port-range="30000-32767"\nI0223 20:04:25.245970 17 flags.go:59] FLAG: --show-hidden-metrics-for-version=""\nI0223 20:04:25.246001 17 flags.go:59] FLAG: --shutdown-delay-duration="1m10s"\nI0223 20:04:25.246016 17 flags.go:59] FLAG: --skip-headers="false"\nI0223 20:04:25.246025 17 flags.go:59] FLAG: --skip-log-headers="false"\nI0223 20:04:25.246033 17 flags.go:59] FLAG: --ssh-keyfile=""\nI0223 20:04:25.246041 17 flags.go:59] FLAG: --ssh-user=""\nI0223 20:04:25.246049 17 flags.go:59] FLAG: --stderrthreshold="2"\nI0223 20:04:25.246057 17 flags.go:59] FLAG: --storage-backend="etcd3"\nI0223 20:04:25.246065 17 flags.go:59] FLAG: --storage-media-type="application/vnd.kubernetes.protobuf"\nI0223 20:04:25.246075 17 flags.go:59] FLAG: --target-ram-mb="0"\nI0223 20:04:25.246083 17 flags.go:59] FLAG: --tls-cert-file="/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.crt"\nI0223 20:04:25.246096 17 flags.go:59] FLAG: --tls-cipher-suites="[TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256]"\nI0223 20:04:25.246126 17 flags.go:59] FLAG: --tls-min-version="VersionTLS12"\nI0223 20:04:25.246136 17 flags.go:59] FLAG: --tls-private-key-file="/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.key"\nI0223 20:04:25.246146 17 flags.go:59] FLAG: --tls-sni-cert-key="[/etc/kubernetes/static-pod-certs/secrets/localhost-serving-cert-certkey/tls.crt,/etc/kubernetes/static-pod-certs/secrets/localhost-serving-cert-certkey/tls.key;/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.crt,/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.key;/etc/kubernetes/static-pod-certs/secrets/external-loadbalancer-serving-certkey/tls.crt,/etc/kubernetes/static-pod-certs/secrets/external-loadbalancer-serving-certkey/tls.key;/etc/kubernetes/static-pod-certs/secrets/internal-loadbalancer-serving-certkey/tls.crt,/etc/kubernetes/static-pod-certs/secrets/internal-loadbalancer-serving-certkey/tls.key;/etc/kubernetes/static-pod-resources/secrets/localhost-recovery-serving-certkey/tls.crt,/etc/kubernetes/static-pod-resources/secrets/localhost-recovery-serving-certkey/tls.key]"\nI0223 20:04:25.246189 17 flags.go:59] FLAG: --token-auth-file=""\nI0223 20:04:25.246198 17 flags.go:59] FLAG: --v="2"\nI0223 20:04:25.246206 17 flags.go:59] FLAG: --version="false"\nI0223 20:04:25.246218 17 flags.go:59] FLAG: --vmodule=""\nI0223 20:04:25.246225 17 flags.go:59] FLAG: --watch-cache="true"\nI0223 20:04:25.246232 17 flags.go:59] FLAG: --watch-cache-sizes="[]"\nI0223 20:04:25.246291 17 server.go:697] external host was not specified, using 10.0.171.12\nI0223 20:04:25.247002 17 server.go:220] Version: v1.20.0+69d7e87\nI0223 20:04:25.248036 17 dynamic_serving_content.go:111] Loaded a new cert/key pair for "serving-cert::/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.key"\nI0223 20:04:25.248386 17 dynamic_serving_content.go:111] Loaded a new cert/key pair for "sni-serving-cert::/etc/kubernetes/static-pod-certs/secrets/localhost-serving-cert-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/localhost-serving-cert-certkey/tls.key"\nI0223 20:04:25.249151 17 dynamic_serving_content.go:111] Loaded a new cert/key pair for "sni-serving-cert::/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.key"\nI0223 20:04:25.249810 17 dynamic_serving_content.go:111] Loaded a new cert/key pair for "sni-serving-cert::/etc/kubernetes/static-pod-certs/secrets/external-loadbalancer-serving-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/external-loadbalancer-serving-certkey/tls.key"\nI0223 20:04:25.250429 17 dynamic_serving_content.go:111] Loaded a new cert/key pair for "sni-serving-cert::/etc/kubernetes/static-pod-certs/secrets/internal-loadbalancer-serving-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/internal-loadbalancer-serving-certkey/tls.key"\nI0223 20:04:25.251207 17 dynamic_serving_content.go:111] Loaded a new cert/key pair for "sni-serving-cert::/etc/kubernetes/static-pod-resources/secrets/localhost-recovery-serving-certkey/tls.crt::/etc/kubernetes/static-pod-resources/secrets/localhost-recovery-serving-certkey/tls.key"\nI0223 20:04:25.826314 17 dynamic_cafile_content.go:129] Loaded a new CA Bundle and Verifier for "client-ca-bundle::/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt"\nI0223 20:04:25.827428 17 dynamic_cafile_content.go:129] Loaded a new CA Bundle and Verifier for "request-header::/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt"\nI0223 20:04:25.831625 17 audit.go:344] Using audit backend: ignoreErrors\nI0223 20:04:25.835313 17 shared_informer.go:240] Waiting for caches to sync for node_authorizer\nW0223 20:04:25.836238 17 admission.go:78] PersistentVolumeLabel admission controller is deprecated. Please remove this controller from your configuration files and scripts.\nI0223 20:04:25.836618 17 admission.go:47] Admission plugin "autoscaling.openshift.io/ClusterResourceOverride" is not configured so it will be disabled.\nI0223 20:04:25.836796 17 admission.go:33] Admission plugin "autoscaling.openshift.io/RunOnceDuration" is not configured so it will be disabled.\nI0223 20:04:25.836925 17 admission.go:32] Admission plugin "scheduling.openshift.io/PodNodeConstraints" is not configured so it will be disabled.\nI0223 20:04:25.839314 17 plugins.go:158] Loaded 19 mutating admission controller(s) successfully in the following order: NamespaceLifecycle,LimitRanger,ServiceAccount,NodeRestriction,TaintNodesByCondition,PodNodeSelector,Priority,DefaultTolerationSeconds,PodTolerationRestriction,PersistentVolumeLabel,DefaultStorageClass,StorageObjectInUseProtection,RuntimeClass,DefaultIngressClass,scheduling.openshift.io/OriginPodNodeEnvironment,image.openshift.io/ImagePolicy,security.openshift.io/SecurityContextConstraint,security.openshift.io/DefaultSecurityContextConstraints,MutatingAdmissionWebhook.\nI0223 20:04:25.839340 17 plugins.go:161] Loaded 35 validating admission controller(s) successfully in the following order: LimitRanger,ServiceAccount,PodNodeSelector,Priority,PodTolerationRestriction,OwnerReferencesPermissionEnforcement,PersistentVolumeClaimResize,RuntimeClass,CertificateApproval,CertificateSigning,CertificateSubjectRestriction,authorization.openshift.io/RestrictSubjectBindings,scheduling.openshift.io/OriginPodNodeEnvironment,network.openshift.io/ExternalIPRanger,network.openshift.io/RestrictedEndpointsAdmission,image.openshift.io/ImagePolicy,security.openshift.io/SecurityContextConstraint,security.openshift.io/SCCExecRestrictions,route.openshift.io/IngressAdmission,config.openshift.io/ValidateAPIServer,config.openshift.io/ValidateAuthentication,config.openshift.io/ValidateFeatureGate,config.openshift.io/ValidateConsole,config.openshift.io/ValidateImage,config.openshift.io/ValidateOAuth,config.openshift.io/ValidateProject,config.openshift.io/DenyDeleteClusterConfiguration,config.openshift.io/ValidateScheduler,quota.openshift.io/ValidateClusterResourceQuota,security.openshift.io/ValidateSecurityContextConstraints,authorization.openshift.io/ValidateRoleBindingRestriction,config.openshift.io/ValidateNetwork,ValidatingAdmissionWebhook,ResourceQuota,quota.openshift.io/ClusterResourceQuota.\nI0223 20:04:25.839370 17 apf_controller.go:171] NewTestableController with serverConcurrencyLimit=4000, requestWaitLimit=15s\nI0223 20:04:25.840388 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:25.840447 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:25.862065 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:25.862116 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:25.877297 17 store.go:1376] Monitoring events count at //events\nI0223 20:04:25.877736 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:04:25.880059 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:04:25.878182 17 dynamic_cafile_content.go:129] Loaded a new CA Bundle and Verifier for "client-ca-bundle::/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt"\nI0223 20:04:25.878262 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:04:25.878806 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:04:25.878857 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:04:25.880677 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:04:25.880772 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:04:25.881078 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:04:25.881212 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:04:25.881316 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0003ccc90, {CONNECTING }\nI0223 20:04:25.881277 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:04:25.881490 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:04:25.881756 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0003cd010, {CONNECTING }\nI0223 20:04:25.881186 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:04:25.881145 17 dynamic_cafile_content.go:129] Loaded a new CA Bundle and Verifier for "request-header::/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt"\nI0223 20:04:25.883347 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0003cd410, {CONNECTING }\nW0223 20:04:25.884139 17 admission.go:78] PersistentVolumeLabel admission controller is deprecated. Please remove this controller from your configuration files and scripts.\nI0223 20:04:25.884322 17 admission.go:47] Admission plugin "autoscaling.openshift.io/ClusterResourceOverride" is not configured so it will be disabled.\nI0223 20:04:25.884460 17 admission.go:33] Admission plugin "autoscaling.openshift.io/RunOnceDuration" is not configured so it will be disabled.\nI0223 20:04:25.884487 17 admission.go:32] Admission plugin "scheduling.openshift.io/PodNodeConstraints" is not configured so it will be disabled.\nI0223 20:04:25.882179 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc000235800, {CONNECTING }\nI0223 20:04:25.891222 17 plugins.go:158] Loaded 19 mutating admission controller(s) successfully in the following order: NamespaceLifecycle,LimitRanger,ServiceAccount,NodeRestriction,TaintNodesByCondition,PodNodeSelector,Priority,DefaultTolerationSeconds,PodTolerationRestriction,PersistentVolumeLabel,DefaultStorageClass,StorageObjectInUseProtection,RuntimeClass,DefaultIngressClass,scheduling.openshift.io/OriginPodNodeEnvironment,image.openshift.io/ImagePolicy,security.openshift.io/SecurityContextConstraint,security.openshift.io/DefaultSecurityContextConstraints,MutatingAdmissionWebhook.\nI0223 20:04:25.897024 17 plugins.go:161] Loaded 35 validating admission controller(s) successfully in the following order: LimitRanger,ServiceAccount,PodNodeSelector,Priority,PodTolerationRestriction,OwnerReferencesPermissionEnforcement,PersistentVolumeClaimResize,RuntimeClass,CertificateApproval,CertificateSigning,CertificateSubjectRestriction,authorization.openshift.io/RestrictSubjectBindings,scheduling.openshift.io/OriginPodNodeEnvironment,network.openshift.io/ExternalIPRanger,network.openshift.io/RestrictedEndpointsAdmission,image.openshift.io/ImagePolicy,security.openshift.io/SecurityContextConstraint,security.openshift.io/SCCExecRestrictions,route.openshift.io/IngressAdmission,config.openshift.io/ValidateAPIServer,config.openshift.io/ValidateAuthentication,config.openshift.io/ValidateFeatureGate,config.openshift.io/ValidateConsole,config.openshift.io/ValidateImage,config.openshift.io/ValidateOAuth,config.openshift.io/ValidateProject,config.openshift.io/DenyDeleteClusterConfiguration,config.openshift.io/ValidateScheduler,quota.openshift.io/ValidateClusterResourceQuota,security.openshift.io/ValidateSecurityContextConstraints,authorization.openshift.io/ValidateRoleBindingRestriction,config.openshift.io/ValidateNetwork,ValidatingAdmissionWebhook,ResourceQuota,quota.openshift.io/ClusterResourceQuota.\nI0223 20:04:25.895810 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0003ccc90, {READY }\nI0223 20:04:25.896233 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0003cd010, {READY }\nI0223 20:04:25.900880 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:25.900972 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:25.902638 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc000235800, {READY }\nI0223 20:04:25.902681 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:04:25.902765 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:04:25.907226 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:04:25.915186 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0003cd410, {READY }\nI0223 20:04:25.922515 17 store.go:1376] Monitoring customresourcedefinitions.apiextensions.k8s.io count at //apiextensions.k8s.io/customresourcedefinitions\nI0223 20:04:25.924192 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:25.924317 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:25.924750 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:04:25.949360 17 store.go:1376] Monitoring customresourcedefinitions.apiextensions.k8s.io count at //apiextensions.k8s.io/customresourcedefinitions\nI0223 20:04:26.042655 17 instance.go:289] Using reconciler: lease\nI0223 20:04:26.043864 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.044141 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.106973 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.111720 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.132901 17 store.go:1376] Monitoring podtemplates count at //podtemplates\nI0223 20:04:26.136304 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.136431 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.169499 17 cacher.go:405] cacher (*core.PodTemplate): initialized\nI0223 20:04:26.173602 17 store.go:1376] Monitoring events count at //events\nI0223 20:04:26.174273 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.174318 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.220321 17 store.go:1376] Monitoring limitranges count at //limitranges\nI0223 20:04:26.222574 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.222642 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.250075 17 cacher.go:405] cacher (*core.LimitRange): initialized\nI0223 20:04:26.285544 17 store.go:1376] Monitoring resourcequotas count at //resourcequotas\nI0223 20:04:26.287123 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.287255 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.302786 17 cacher.go:405] cacher (*core.ResourceQuota): initialized\nI0223 20:04:26.357024 17 store.go:1376] Monitoring secrets count at //secrets\nI0223 20:04:26.357892 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.357973 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.380795 17 store.go:1376] Monitoring persistentvolumes count at //persistentvolumes\nI0223 20:04:26.381610 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.381651 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.428940 17 cacher.go:405] cacher (*core.PersistentVolume): initialized\nI0223 20:04:26.435684 17 store.go:1376] Monitoring persistentvolumeclaims count at //persistentvolumeclaims\nI0223 20:04:26.436734 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.436890 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.458562 17 cacher.go:405] cacher (*core.PersistentVolumeClaim): initialized\nI0223 20:04:26.475761 17 store.go:1376] Monitoring configmaps count at //configmaps\nI0223 20:04:26.478218 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.478342 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.515544 17 store.go:1376] Monitoring namespaces count at //namespaces\nI0223 20:04:26.516604 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.516678 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.576224 17 store.go:1376] Monitoring endpoints count at //services/endpoints\nI0223 20:04:26.582234 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.583846 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.626400 17 cacher.go:405] cacher (*core.Namespace): initialized\nI0223 20:04:26.648231 17 store.go:1376] Monitoring nodes count at //minions\nI0223 20:04:26.649979 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.656247 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.687989 17 cacher.go:405] cacher (*core.Node): initialized\nI0223 20:04:26.693900 17 cacher.go:405] cacher (*core.Endpoints): initialized\nI0223 20:04:26.694905 17 store.go:1376] Monitoring pods count at //pods\nI0223 20:04:26.695828 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.695967 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.706579 17 trace.go:205] Trace[933648718]: "List etcd3" key:/apiextensions.k8s.io/customresourcedefinitions,resourceVersion:,resourceVersionMatch:,limit:10000,continue: (23-Feb-2021 20:04:25.950) (total time: 756ms):\nTrace[933648718]: [756.277304ms] [756.277304ms] END\nI0223 20:04:26.709198 17 cacher.go:405] cacher (*apiextensions.CustomResourceDefinition): initialized\nI0223 20:04:26.731385 17 store.go:1376] Monitoring serviceaccounts count at //serviceaccounts\nI0223 20:04:26.743025 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.743157 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.779347 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.779417 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.804876 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.804938 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.840271 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.840442 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.852467 17 store.go:1376] Monitoring replicationcontrollers count at //controllers\nI0223 20:04:26.853637 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:26.853810 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:26.876445 17 cacher.go:405] cacher (*core.ServiceAccount): initialized\nI0223 20:04:26.898563 17 cacher.go:405] cacher (*core.ReplicationController): initialized\nI0223 20:04:26.899522 17 store.go:1376] Monitoring services count at //services/specs\nI0223 20:04:26.899629 17 rest.go:131] the default service ipfamily for this cluster is: IPv4\nI0223 20:04:26.913177 17 trace.go:205] Trace[629270168]: "List etcd3" key:/apiextensions.k8s.io/customresourcedefinitions,resourceVersion:,resourceVersionMatch:,limit:10000,continue: (23-Feb-2021 20:04:25.925) (total time: 988ms):\nTrace[629270168]: [988.101676ms] [988.101676ms] END\nI0223 20:04:26.920799 17 cacher.go:405] cacher (*apiextensions.CustomResourceDefinition): initialized\nI0223 20:04:26.943141 17 cacher.go:405] cacher (*core.ConfigMap): initialized\nI0223 20:04:26.964318 17 cacher.go:782] cacher (*core.ConfigMap): 1 objects queued in incoming channel.\nI0223 20:04:26.964359 17 cacher.go:782] cacher (*core.ConfigMap): 2 objects queued in incoming channel.\nI0223 20:04:27.003375 17 cacher.go:405] cacher (*core.Service): initialized\nI0223 20:04:27.024387 17 cacher.go:405] cacher (*core.Pod): initialized\nI0223 20:04:27.116767 17 instance.go:594] Skipping disabled API group "internal.apiserver.k8s.io".\nI0223 20:04:27.116892 17 instance.go:615] Enabling API group "authentication.k8s.io".\nI0223 20:04:27.116987 17 instance.go:615] Enabling API group "authorization.k8s.io".\nI0223 20:04:27.122773 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.122860 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.145667 17 store.go:1376] Monitoring horizontalpodautoscalers.autoscaling count at //horizontalpodautoscalers\nI0223 20:04:27.147234 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.147364 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.165258 17 cacher.go:405] cacher (*autoscaling.HorizontalPodAutoscaler): initialized\nI0223 20:04:27.179386 17 store.go:1376] Monitoring horizontalpodautoscalers.autoscaling count at //horizontalpodautoscalers\nI0223 20:04:27.182450 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.182523 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.201292 17 cacher.go:405] cacher (*autoscaling.HorizontalPodAutoscaler): initialized\nI0223 20:04:27.201570 17 store.go:1376] Monitoring horizontalpodautoscalers.autoscaling count at //horizontalpodautoscalers\nI0223 20:04:27.201669 17 instance.go:615] Enabling API group "autoscaling".\nI0223 20:04:27.202664 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.202766 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.228659 17 store.go:1376] Monitoring jobs.batch count at //jobs\nI0223 20:04:27.229538 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.229635 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.232569 17 cacher.go:405] cacher (*autoscaling.HorizontalPodAutoscaler): initialized\nI0223 20:04:27.244735 17 cacher.go:405] cacher (*batch.Job): initialized\nI0223 20:04:27.248619 17 store.go:1376] Monitoring cronjobs.batch count at //cronjobs\nI0223 20:04:27.248673 17 instance.go:615] Enabling API group "batch".\nI0223 20:04:27.249552 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.249607 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.265473 17 cacher.go:405] cacher (*batch.CronJob): initialized\nI0223 20:04:27.267371 17 store.go:1376] Monitoring certificatesigningrequests.certificates.k8s.io count at //certificatesigningrequests\nI0223 20:04:27.268397 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.268506 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.304412 17 store.go:1376] Monitoring certificatesigningrequests.certificates.k8s.io count at //certificatesigningrequests\nI0223 20:04:27.304488 17 instance.go:615] Enabling API group "certificates.k8s.io".\nI0223 20:04:27.305099 17 cacher.go:405] cacher (*certificates.CertificateSigningRequest): initialized\nI0223 20:04:27.306236 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.306306 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.345404 17 cacher.go:405] cacher (*certificates.CertificateSigningRequest): initialized\nI0223 20:04:27.350570 17 store.go:1376] Monitoring leases.coordination.k8s.io count at //leases\nI0223 20:04:27.354596 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.354724 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.370278 17 trace.go:205] Trace[608177586]: "List etcd3" key:/secrets,resourceVersion:,resourceVersionMatch:,limit:10000,continue: (23-Feb-2021 20:04:26.370) (total time: 999ms):\nTrace[608177586]: [999.854798ms] [999.854798ms] END\nI0223 20:04:27.377848 17 cacher.go:405] cacher (*core.Secret): initialized\nI0223 20:04:27.386497 17 cacher.go:405] cacher (*coordination.Lease): initialized\nI0223 20:04:27.387675 17 store.go:1376] Monitoring leases.coordination.k8s.io count at //leases\nI0223 20:04:27.387815 17 instance.go:615] Enabling API group "coordination.k8s.io".\nI0223 20:04:27.389044 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.389178 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.418801 17 store.go:1376] Monitoring endpointslices.discovery.k8s.io count at //endpointslices\nI0223 20:04:27.418980 17 instance.go:615] Enabling API group "discovery.k8s.io".\nI0223 20:04:27.420087 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.420229 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.422163 17 cacher.go:405] cacher (*coordination.Lease): initialized\nI0223 20:04:27.436279 17 store.go:1376] Monitoring ingresses.networking.k8s.io count at //ingress\nI0223 20:04:27.436397 17 instance.go:615] Enabling API group "extensions".\nI0223 20:04:27.437381 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.437496 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.444875 17 cacher.go:405] cacher (*networking.Ingress): initialized\nI0223 20:04:27.460487 17 store.go:1376] Monitoring networkpolicies.networking.k8s.io count at //networkpolicies\nI0223 20:04:27.461619 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.461712 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.481119 17 store.go:1376] Monitoring ingresses.networking.k8s.io count at //ingress\nI0223 20:04:27.482029 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.482143 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.482931 17 cacher.go:405] cacher (*networking.NetworkPolicy): initialized\nI0223 20:04:27.496119 17 cacher.go:405] cacher (*discovery.EndpointSlice): initialized\nI0223 20:04:27.498380 17 store.go:1376] Monitoring ingressclasses.networking.k8s.io count at //ingressclasses\nI0223 20:04:27.499330 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.499373 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.504951 17 cacher.go:405] cacher (*networking.Ingress): initialized\nI0223 20:04:27.519356 17 cacher.go:405] cacher (*networking.IngressClass): initialized\nI0223 20:04:27.520033 17 store.go:1376] Monitoring ingresses.networking.k8s.io count at //ingress\nI0223 20:04:27.522582 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.522675 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.533536 17 cacher.go:405] cacher (*networking.Ingress): initialized\nI0223 20:04:27.545445 17 store.go:1376] Monitoring ingressclasses.networking.k8s.io count at //ingressclasses\nI0223 20:04:27.545501 17 instance.go:615] Enabling API group "networking.k8s.io".\nI0223 20:04:27.546383 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.546439 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.561505 17 store.go:1376] Monitoring runtimeclasses.node.k8s.io count at //runtimeclasses\nI0223 20:04:27.562400 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.562448 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.564517 17 cacher.go:405] cacher (*networking.IngressClass): initialized\nI0223 20:04:27.576319 17 cacher.go:405] cacher (*node.RuntimeClass): initialized\nI0223 20:04:27.576377 17 store.go:1376] Monitoring runtimeclasses.node.k8s.io count at //runtimeclasses\nI0223 20:04:27.576410 17 instance.go:615] Enabling API group "node.k8s.io".\nI0223 20:04:27.577345 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.577397 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.586249 17 cacher.go:405] cacher (*node.RuntimeClass): initialized\nI0223 20:04:27.593246 17 store.go:1376] Monitoring poddisruptionbudgets.policy count at //poddisruptionbudgets\nI0223 20:04:27.597608 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.597661 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.600643 17 cacher.go:405] cacher (*policy.PodDisruptionBudget): initialized\nI0223 20:04:27.612680 17 store.go:1376] Monitoring podsecuritypolicies.policy count at //podsecuritypolicy\nI0223 20:04:27.612723 17 instance.go:615] Enabling API group "policy".\nI0223 20:04:27.613476 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.613513 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.629813 17 cacher.go:405] cacher (*policy.PodSecurityPolicy): initialized\nI0223 20:04:27.630078 17 store.go:1376] Monitoring roles.rbac.authorization.k8s.io count at //roles\nI0223 20:04:27.631277 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.631379 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.647356 17 store.go:1376] Monitoring rolebindings.rbac.authorization.k8s.io count at //rolebindings\nI0223 20:04:27.648036 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.648072 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.667279 17 store.go:1376] Monitoring clusterroles.rbac.authorization.k8s.io count at //clusterroles\nI0223 20:04:27.668271 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.668362 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.676325 17 cacher.go:405] cacher (*rbac.Role): initialized\nI0223 20:04:27.693063 17 store.go:1376] Monitoring clusterrolebindings.rbac.authorization.k8s.io count at //clusterrolebindings\nI0223 20:04:27.696636 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.696741 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.703721 17 cacher.go:405] cacher (*rbac.RoleBinding): initialized\nI0223 20:04:27.721401 17 store.go:1376] Monitoring roles.rbac.authorization.k8s.io count at //roles\nI0223 20:04:27.729326 17 cacher.go:405] cacher (*rbac.ClusterRoleBinding): initialized\nI0223 20:04:27.732582 17 cacher.go:405] cacher (*rbac.Role): initialized\nI0223 20:04:27.734458 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.734564 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.736637 17 cacher.go:405] cacher (*rbac.ClusterRole): initialized\nI0223 20:04:27.751320 17 store.go:1376] Monitoring rolebindings.rbac.authorization.k8s.io count at //rolebindings\nI0223 20:04:27.752087 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.752183 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.768330 17 store.go:1376] Monitoring clusterroles.rbac.authorization.k8s.io count at //clusterroles\nI0223 20:04:27.769315 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.769384 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.790526 17 store.go:1376] Monitoring clusterrolebindings.rbac.authorization.k8s.io count at //clusterrolebindings\nI0223 20:04:27.790599 17 instance.go:615] Enabling API group "rbac.authorization.k8s.io".\nI0223 20:04:27.794334 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.794393 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.799178 17 cacher.go:405] cacher (*rbac.RoleBinding): initialized\nI0223 20:04:27.815447 17 store.go:1376] Monitoring priorityclasses.scheduling.k8s.io count at //priorityclasses\nI0223 20:04:27.819474 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.819579 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.820395 17 cacher.go:405] cacher (*rbac.ClusterRole): initialized\nI0223 20:04:27.822252 17 cacher.go:405] cacher (*scheduling.PriorityClass): initialized\nI0223 20:04:27.823428 17 cacher.go:405] cacher (*rbac.ClusterRoleBinding): initialized\nI0223 20:04:27.836311 17 store.go:1376] Monitoring priorityclasses.scheduling.k8s.io count at //priorityclasses\nI0223 20:04:27.836660 17 instance.go:615] Enabling API group "scheduling.k8s.io".\nI0223 20:04:27.837631 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.837680 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.853027 17 cacher.go:405] cacher (*scheduling.PriorityClass): initialized\nI0223 20:04:27.858292 17 store.go:1376] Monitoring storageclasses.storage.k8s.io count at //storageclasses\nI0223 20:04:27.858961 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.858995 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.879689 17 cacher.go:405] cacher (*storage.StorageClass): initialized\nI0223 20:04:27.881679 17 store.go:1376] Monitoring volumeattachments.storage.k8s.io count at //volumeattachments\nI0223 20:04:27.882573 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.882609 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.889034 17 cacher.go:405] cacher (*storage.VolumeAttachment): initialized\nI0223 20:04:27.899516 17 store.go:1376] Monitoring csinodes.storage.k8s.io count at //csinodes\nI0223 20:04:27.900295 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.900345 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.903950 17 cacher.go:405] cacher (*storage.CSINode): initialized\nI0223 20:04:27.924271 17 store.go:1376] Monitoring csidrivers.storage.k8s.io count at //csidrivers\nI0223 20:04:27.925327 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.925464 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.947786 17 store.go:1376] Monitoring storageclasses.storage.k8s.io count at //storageclasses\nI0223 20:04:27.948816 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.948941 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.964170 17 cacher.go:782] cacher (*coordination.Lease): 1 objects queued in incoming channel.\nI0223 20:04:27.964259 17 cacher.go:782] cacher (*coordination.Lease): 2 objects queued in incoming channel.\nI0223 20:04:27.975268 17 cacher.go:405] cacher (*storage.CSIDriver): initialized\nI0223 20:04:27.975572 17 cacher.go:782] cacher (*coordination.Lease): 1 objects queued in incoming channel.\nI0223 20:04:27.975589 17 cacher.go:782] cacher (*coordination.Lease): 2 objects queued in incoming channel.\nI0223 20:04:27.975893 17 cacher.go:405] cacher (*storage.StorageClass): initialized\nI0223 20:04:27.977379 17 store.go:1376] Monitoring volumeattachments.storage.k8s.io count at //volumeattachments\nI0223 20:04:27.978252 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:27.978293 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:27.981997 17 cacher.go:405] cacher (*storage.VolumeAttachment): initialized\nI0223 20:04:28.001442 17 store.go:1376] Monitoring csinodes.storage.k8s.io count at //csinodes\nI0223 20:04:28.002535 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.002648 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.015523 17 cacher.go:405] cacher (*storage.CSINode): initialized\nI0223 20:04:28.020684 17 store.go:1376] Monitoring csidrivers.storage.k8s.io count at //csidrivers\nI0223 20:04:28.020834 17 instance.go:615] Enabling API group "storage.k8s.io".\nI0223 20:04:28.021735 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.021876 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.049974 17 cacher.go:405] cacher (*storage.CSIDriver): initialized\nI0223 20:04:28.053001 17 store.go:1376] Monitoring flowschemas.flowcontrol.apiserver.k8s.io count at //flowschemas\nI0223 20:04:28.054178 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.054225 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.076963 17 store.go:1376] Monitoring prioritylevelconfigurations.flowcontrol.apiserver.k8s.io count at //prioritylevelconfigurations\nI0223 20:04:28.077089 17 instance.go:615] Enabling API group "flowcontrol.apiserver.k8s.io".\nI0223 20:04:28.078094 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.078991 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.082877 17 cacher.go:405] cacher (*flowcontrol.FlowSchema): initialized\nI0223 20:04:28.097235 17 store.go:1376] Monitoring deployments.apps count at //deployments\nI0223 20:04:28.098047 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.098155 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.102080 17 cacher.go:405] cacher (*flowcontrol.PriorityLevelConfiguration): initialized\nI0223 20:04:28.130860 17 store.go:1376] Monitoring statefulsets.apps count at //statefulsets\nI0223 20:04:28.131680 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.131757 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.135161 17 cacher.go:782] cacher (*coordination.Lease): 3 objects queued in incoming channel.\nI0223 20:04:28.135240 17 cacher.go:782] cacher (*coordination.Lease): 4 objects queued in incoming channel.\nI0223 20:04:28.151674 17 cacher.go:405] cacher (*apps.StatefulSet): initialized\nI0223 20:04:28.152267 17 store.go:1376] Monitoring daemonsets.apps count at //daemonsets\nI0223 20:04:28.153354 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.153441 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.172655 17 store.go:1376] Monitoring replicasets.apps count at //replicasets\nI0223 20:04:28.173507 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.173597 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.193291 17 store.go:1376] Monitoring controllerrevisions.apps count at //controllerrevisions\nI0223 20:04:28.193446 17 instance.go:615] Enabling API group "apps".\nI0223 20:04:28.194383 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.194429 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.199432 17 cacher.go:405] cacher (*apps.DaemonSet): initialized\nI0223 20:04:28.222585 17 store.go:1376] Monitoring validatingwebhookconfigurations.admissionregistration.k8s.io count at //validatingwebhookconfigurations\nI0223 20:04:28.223395 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.228592 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.228498 17 cacher.go:405] cacher (*apps.ControllerRevision): initialized\nI0223 20:04:28.237298 17 cacher.go:405] cacher (*admissionregistration.ValidatingWebhookConfiguration): initialized\nI0223 20:04:28.251258 17 cacher.go:405] cacher (*apps.Deployment): initialized\nI0223 20:04:28.251848 17 store.go:1376] Monitoring mutatingwebhookconfigurations.admissionregistration.k8s.io count at //mutatingwebhookconfigurations\nI0223 20:04:28.253223 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.254464 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.258870 17 cacher.go:405] cacher (*admissionregistration.MutatingWebhookConfiguration): initialized\nI0223 20:04:28.279278 17 cacher.go:782] cacher (*apps.Deployment): 1 objects queued in incoming channel.\nI0223 20:04:28.279389 17 cacher.go:782] cacher (*apps.Deployment): 2 objects queued in incoming channel.\nI0223 20:04:28.279450 17 cacher.go:782] cacher (*apps.Deployment): 3 objects queued in incoming channel.\nI0223 20:04:28.279491 17 cacher.go:782] cacher (*apps.Deployment): 4 objects queued in incoming channel.\nI0223 20:04:28.279583 17 cacher.go:782] cacher (*apps.Deployment): 5 objects queued in incoming channel.\nI0223 20:04:28.279646 17 cacher.go:782] cacher (*apps.Deployment): 6 objects queued in incoming channel.\nI0223 20:04:28.279716 17 cacher.go:782] cacher (*apps.Deployment): 7 objects queued in incoming channel.\nI0223 20:04:28.279755 17 cacher.go:782] cacher (*apps.Deployment): 8 objects queued in incoming channel.\nI0223 20:04:28.279840 17 cacher.go:782] cacher (*apps.Deployment): 9 objects queued in incoming channel.\nI0223 20:04:28.279918 17 cacher.go:782] cacher (*apps.Deployment): 10 objects queued in incoming channel.\nI0223 20:04:28.280028 17 cacher.go:782] cacher (*apps.Deployment): 11 objects queued in incoming channel.\nI0223 20:04:28.280140 17 cacher.go:782] cacher (*apps.Deployment): 12 objects queued in incoming channel.\nI0223 20:04:28.280205 17 cacher.go:782] cacher (*apps.Deployment): 13 objects queued in incoming channel.\nI0223 20:04:28.280247 17 cacher.go:782] cacher (*apps.Deployment): 14 objects queued in incoming channel.\nI0223 20:04:28.305269 17 store.go:1376] Monitoring validatingwebhookconfigurations.admissionregistration.k8s.io count at //validatingwebhookconfigurations\nI0223 20:04:28.307196 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.307317 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.325356 17 cacher.go:405] cacher (*apps.ReplicaSet): initialized\nI0223 20:04:28.337862 17 store.go:1376] Monitoring mutatingwebhookconfigurations.admissionregistration.k8s.io count at //mutatingwebhookconfigurations\nI0223 20:04:28.338002 17 instance.go:615] Enabling API group "admissionregistration.k8s.io".\nI0223 20:04:28.339180 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.339299 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.342589 17 cacher.go:405] cacher (*admissionregistration.ValidatingWebhookConfiguration): initialized\nI0223 20:04:28.346087 17 cacher.go:405] cacher (*admissionregistration.MutatingWebhookConfiguration): initialized\nI0223 20:04:28.355894 17 store.go:1376] Monitoring events count at //events\nI0223 20:04:28.356829 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.356894 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.391532 17 store.go:1376] Monitoring events count at //events\nI0223 20:04:28.391590 17 instance.go:615] Enabling API group "events.k8s.io".\nI0223 20:04:28.416495 17 cacher.go:782] cacher (*apps.ReplicaSet): 1 objects queued in incoming channel.\nI0223 20:04:28.416607 17 cacher.go:782] cacher (*apps.ReplicaSet): 2 objects queued in incoming channel.\nI0223 20:04:28.416655 17 cacher.go:782] cacher (*apps.ReplicaSet): 3 objects queued in incoming channel.\nI0223 20:04:28.416700 17 cacher.go:782] cacher (*apps.ReplicaSet): 4 objects queued in incoming channel.\nI0223 20:04:28.416780 17 cacher.go:782] cacher (*apps.ReplicaSet): 5 objects queued in incoming channel.\nI0223 20:04:28.416835 17 cacher.go:782] cacher (*apps.ReplicaSet): 6 objects queued in incoming channel.\nI0223 20:04:28.416885 17 cacher.go:782] cacher (*apps.ReplicaSet): 7 objects queued in incoming channel.\nI0223 20:04:28.416951 17 cacher.go:782] cacher (*apps.ReplicaSet): 8 objects queued in incoming channel.\nI0223 20:04:28.417026 17 cacher.go:782] cacher (*apps.ReplicaSet): 9 objects queued in incoming channel.\nI0223 20:04:28.417072 17 cacher.go:782] cacher (*apps.ReplicaSet): 10 objects queued in incoming channel.\nW0223 20:04:28.627811 17 genericapiserver.go:455] Skipping API batch/v2alpha1 because it has no resources.\nW0223 20:04:28.643668 17 genericapiserver.go:455] Skipping API discovery.k8s.io/v1alpha1 because it has no resources.\nW0223 20:04:28.659797 17 genericapiserver.go:455] Skipping API node.k8s.io/v1alpha1 because it has no resources.\nW0223 20:04:28.672522 17 genericapiserver.go:455] Skipping API rbac.authorization.k8s.io/v1alpha1 because it has no resources.\nW0223 20:04:28.677146 17 genericapiserver.go:455] Skipping API scheduling.k8s.io/v1alpha1 because it has no resources.\nW0223 20:04:28.685297 17 genericapiserver.go:455] Skipping API storage.k8s.io/v1alpha1 because it has no resources.\nW0223 20:04:28.700640 17 genericapiserver.go:455] Skipping API apps/v1beta2 because it has no resources.\nW0223 20:04:28.700669 17 genericapiserver.go:455] Skipping API apps/v1beta1 because it has no resources.\nW0223 20:04:28.713204 17 admission.go:78] PersistentVolumeLabel admission controller is deprecated. Please remove this controller from your configuration files and scripts.\nI0223 20:04:28.713295 17 admission.go:47] Admission plugin "autoscaling.openshift.io/ClusterResourceOverride" is not configured so it will be disabled.\nI0223 20:04:28.713365 17 admission.go:33] Admission plugin "autoscaling.openshift.io/RunOnceDuration" is not configured so it will be disabled.\nI0223 20:04:28.713386 17 admission.go:32] Admission plugin "scheduling.openshift.io/PodNodeConstraints" is not configured so it will be disabled.\nI0223 20:04:28.714582 17 plugins.go:158] Loaded 19 mutating admission controller(s) successfully in the following order: NamespaceLifecycle,LimitRanger,ServiceAccount,NodeRestriction,TaintNodesByCondition,PodNodeSelector,Priority,DefaultTolerationSeconds,PodTolerationRestriction,PersistentVolumeLabel,DefaultStorageClass,StorageObjectInUseProtection,RuntimeClass,DefaultIngressClass,scheduling.openshift.io/OriginPodNodeEnvironment,image.openshift.io/ImagePolicy,security.openshift.io/SecurityContextConstraint,security.openshift.io/DefaultSecurityContextConstraints,MutatingAdmissionWebhook.\nI0223 20:04:28.714616 17 plugins.go:161] Loaded 35 validating admission controller(s) successfully in the following order: LimitRanger,ServiceAccount,PodNodeSelector,Priority,PodTolerationRestriction,OwnerReferencesPermissionEnforcement,PersistentVolumeClaimResize,RuntimeClass,CertificateApproval,CertificateSigning,CertificateSubjectRestriction,authorization.openshift.io/RestrictSubjectBindings,scheduling.openshift.io/OriginPodNodeEnvironment,network.openshift.io/ExternalIPRanger,network.openshift.io/RestrictedEndpointsAdmission,image.openshift.io/ImagePolicy,security.openshift.io/SecurityContextConstraint,security.openshift.io/SCCExecRestrictions,route.openshift.io/IngressAdmission,config.openshift.io/ValidateAPIServer,config.openshift.io/ValidateAuthentication,config.openshift.io/ValidateFeatureGate,config.openshift.io/ValidateConsole,config.openshift.io/ValidateImage,config.openshift.io/ValidateOAuth,config.openshift.io/ValidateProject,config.openshift.io/DenyDeleteClusterConfiguration,config.openshift.io/ValidateScheduler,quota.openshift.io/ValidateClusterResourceQuota,security.openshift.io/ValidateSecurityContextConstraints,authorization.openshift.io/ValidateRoleBindingRestriction,config.openshift.io/ValidateNetwork,ValidatingAdmissionWebhook,ResourceQuota,quota.openshift.io/ClusterResourceQuota.\nI0223 20:04:28.717126 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.717179 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.737440 17 store.go:1376] Monitoring apiservices.apiregistration.k8s.io count at //apiregistration.k8s.io/apiservices\nI0223 20:04:28.738194 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:28.738281 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:28.751843 17 store.go:1376] Monitoring apiservices.apiregistration.k8s.io count at //apiregistration.k8s.io/apiservices\nI0223 20:04:28.754619 17 dynamic_serving_content.go:111] Loaded a new cert/key pair for "aggregator-proxy-cert::/etc/kubernetes/static-pod-certs/secrets/aggregator-client/tls.crt::/etc/kubernetes/static-pod-certs/secrets/aggregator-client/tls.key"\nI0223 20:04:28.760398 17 cacher.go:405] cacher (*apiregistration.APIService): initialized\nI0223 20:04:28.768291 17 cacher.go:405] cacher (*apiregistration.APIService): initialized\nI0223 20:04:31.034194 17 aggregator.go:109] Building initial OpenAPI spec\nI0223 20:04:31.980404 17 aggregator.go:112] Finished initial OpenAPI spec generation after 946.177635ms\nI0223 20:04:31.980969 17 dynamic_cafile_content.go:167] Starting request-header::/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt\nI0223 20:04:31.980976 17 dynamic_cafile_content.go:167] Starting client-ca-bundle::/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt\nI0223 20:04:31.981300 17 dynamic_serving_content.go:130] Starting serving-cert::/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.key\nI0223 20:04:31.981318 17 dynamic_serving_content.go:130] Starting sni-serving-cert::/etc/kubernetes/static-pod-certs/secrets/localhost-serving-cert-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/localhost-serving-cert-certkey/tls.key\nI0223 20:04:31.981950 17 dynamic_serving_content.go:130] Starting sni-serving-cert::/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.key\nI0223 20:04:31.982182 17 dynamic_serving_content.go:130] Starting sni-serving-cert::/etc/kubernetes/static-pod-certs/secrets/external-loadbalancer-serving-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/external-loadbalancer-serving-certkey/tls.key\nI0223 20:04:31.982408 17 dynamic_serving_content.go:130] Starting sni-serving-cert::/etc/kubernetes/static-pod-certs/secrets/internal-loadbalancer-serving-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/internal-loadbalancer-serving-certkey/tls.key\nI0223 20:04:31.982845 17 dynamic_serving_content.go:130] Starting sni-serving-cert::/etc/kubernetes/static-pod-resources/secrets/localhost-recovery-serving-certkey/tls.crt::/etc/kubernetes/static-pod-resources/secrets/localhost-recovery-serving-certkey/tls.key\nI0223 20:04:31.983193 17 tlsconfig.go:178] loaded client CA [0/"client-ca-bundle::/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt,request-header::/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt"]: "admin-kubeconfig-signer" [] issuer="" (2021-02-23 13:30:35 +0000 UTC to 2031-02-21 13:30:35 +0000 UTC (now=2021-02-23 20:04:31.983161443 +0000 UTC))\nI0223 20:04:31.983253 17 tlsconfig.go:178] loaded client CA [1/"client-ca-bundle::/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt,request-header::/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt"]: "kube-csr-signer_@1614087857" [] issuer="kubelet-signer" (2021-02-23 13:44:17 +0000 UTC to 2021-02-24 13:30:43 +0000 UTC (now=2021-02-23 20:04:31.983235589 +0000 UTC))\nI0223 20:04:31.983283 17 tlsconfig.go:178] loaded client CA [2/"client-ca-bundle::/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt,request-header::/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt"]: "kubelet-signer" [] issuer="" (2021-02-23 13:30:43 +0000 UTC to 2021-02-24 13:30:43 +0000 UTC (now=2021-02-23 20:04:31.983268863 +0000 UTC))\nI0223 20:04:31.983311 17 tlsconfig.go:178] loaded client CA [3/"client-ca-bundle::/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt,request-header::/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt"]: "kube-apiserver-to-kubelet-signer" [] issuer="" (2021-02-23 13:30:43 +0000 UTC to 2022-02-23 13:30:43 +0000 UTC (now=2021-02-23 20:04:31.983297719 +0000 UTC))\nI0223 20:04:31.983354 17 tlsconfig.go:178] loaded client CA [4/"client-ca-bundle::/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt,request-header::/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt"]: "kube-control-plane-signer" [] issuer="" (2021-02-23 13:30:43 +0000 UTC to 2022-02-23 13:30:43 +0000 UTC (now=2021-02-23 20:04:31.983324464 +0000 UTC))\nI0223 20:04:31.983386 17 tlsconfig.go:178] loaded client CA [5/"client-ca-bundle::/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt,request-header::/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt"]: "kubelet-bootstrap-kubeconfig-signer" [] issuer="" (2021-02-23 13:30:37 +0000 UTC to 2031-02-21 13:30:37 +0000 UTC (now=2021-02-23 20:04:31.983376508 +0000 UTC))\nI0223 20:04:31.983404 17 tlsconfig.go:178] loaded client CA [6/"client-ca-bundle::/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt,request-header::/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt"]: "openshift-kube-apiserver-operator_node-system-admin-signer@1614087859" [] issuer="" (2021-02-23 13:44:19 +0000 UTC to 2022-02-23 13:44:20 +0000 UTC (now=2021-02-23 20:04:31.98339595 +0000 UTC))\nI0223 20:04:31.983436 17 tlsconfig.go:178] loaded client CA [7/"client-ca-bundle::/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt,request-header::/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt"]: "openshift-kube-apiserver-operator_aggregator-client-signer@1614108647" [] issuer="" (2021-02-23 19:30:46 +0000 UTC to 2021-02-24 07:30:47 +0000 UTC (now=2021-02-23 20:04:31.983418409 +0000 UTC))\nI0223 20:04:31.983470 17 tlsconfig.go:178] loaded client CA [8/"client-ca-bundle::/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt,request-header::/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt"]: "aggregator-signer" [] issuer="" (2021-02-23 13:30:40 +0000 UTC to 2021-02-24 13:30:40 +0000 UTC (now=2021-02-23 20:04:31.983460261 +0000 UTC))\nI0223 20:04:31.983891 17 tlsconfig.go:200] loaded serving cert ["serving-cert::/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.key"]: "172.30.0.1" [serving] validServingFor=[172.30.0.1,kubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster.local,openshift,openshift.default,openshift.default.svc,openshift.default.svc.cluster.local,172.30.0.1] issuer="kube-apiserver-service-network-signer" (2021-02-23 19:44:43 +0000 UTC to 2021-02-24 07:44:44 +0000 UTC (now=2021-02-23 20:04:31.983868154 +0000 UTC))\nI0223 20:04:31.984291 17 named_certificates.go:53] loaded SNI cert [5/"sni-serving-cert::/etc/kubernetes/static-pod-resources/secrets/localhost-recovery-serving-certkey/tls.crt::/etc/kubernetes/static-pod-resources/secrets/localhost-recovery-serving-certkey/tls.key"]: "localhost-recovery" [serving] validServingFor=[localhost-recovery] issuer="openshift-kube-apiserver-operator_localhost-recovery-serving-signer@1614087859" (2021-02-23 13:44:38 +0000 UTC to 2031-02-21 13:44:19 +0000 UTC (now=2021-02-23 20:04:31.984268859 +0000 UTC))\nI0223 20:04:31.984713 17 named_certificates.go:53] loaded SNI cert [4/"sni-serving-cert::/etc/kubernetes/static-pod-certs/secrets/internal-loadbalancer-serving-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/internal-loadbalancer-serving-certkey/tls.key"]: "api-int.rhamilto.devcluster.openshift.com" [serving] validServingFor=[api-int.rhamilto.devcluster.openshift.com] issuer="kube-apiserver-lb-signer" (2021-02-23 19:44:32 +0000 UTC to 2021-02-24 07:44:33 +0000 UTC (now=2021-02-23 20:04:31.984697529 +0000 UTC))\nI0223 20:04:31.985065 17 named_certificates.go:53] loaded SNI cert [3/"sni-serving-cert::/etc/kubernetes/static-pod-certs/secrets/external-loadbalancer-serving-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/external-loadbalancer-serving-certkey/tls.key"]: "api.rhamilto.devcluster.openshift.com" [serving] validServingFor=[api.rhamilto.devcluster.openshift.com] issuer="kube-apiserver-lb-signer" (2021-02-23 19:44:32 +0000 UTC to 2021-02-24 07:44:33 +0000 UTC (now=2021-02-23 20:04:31.985044926 +0000 UTC))\nI0223 20:04:31.985571 17 named_certificates.go:53] loaded SNI cert [2/"sni-serving-cert::/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.key"]: "172.30.0.1" [serving] validServingFor=[172.30.0.1,kubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster.local,openshift,openshift.default,openshift.default.svc,openshift.default.svc.cluster.local,172.30.0.1] issuer="kube-apiserver-service-network-signer" (2021-02-23 19:44:43 +0000 UTC to 2021-02-24 07:44:44 +0000 UTC (now=2021-02-23 20:04:31.985556438 +0000 UTC))\nI0223 20:04:31.985982 17 named_certificates.go:53] loaded SNI cert [1/"sni-serving-cert::/etc/kubernetes/static-pod-certs/secrets/localhost-serving-cert-certkey/tls.crt::/etc/kubernetes/static-pod-certs/secrets/localhost-serving-cert-certkey/tls.key"]: "127.0.0.1" [serving] validServingFor=[127.0.0.1,localhost,127.0.0.1] issuer="kube-apiserver-localhost-signer" (2021-02-23 19:44:32 +0000 UTC to 2021-02-24 07:44:33 +0000 UTC (now=2021-02-23 20:04:31.985961899 +0000 UTC))\nI0223 20:04:31.986409 17 named_certificates.go:53] loaded SNI cert [0/"self-signed loopback"]: "apiserver-loopback-client@1614110665" [serving] validServingFor=[apiserver-loopback-client] issuer="apiserver-loopback-client-ca@1614110665" (2021-02-23 19:04:25 +0000 UTC to 2022-02-23 19:04:25 +0000 UTC (now=2021-02-23 20:04:31.986387278 +0000 UTC))\nI0223 20:04:31.986477 17 secure_serving.go:197] Serving securely on [::]:6443\nI0223 20:04:31.986573 17 tlsconfig.go:240] Starting DynamicServingCertificateController\nI0223 20:04:31.986723 17 available_controller.go:475] Starting AvailableConditionController\nI0223 20:04:31.986773 17 cache.go:32] Waiting for caches to sync for AvailableConditionController controller\nI0223 20:04:31.988525 17 reflector.go:219] Starting reflector *v1.Group (10m0s) from github.com/openshift/client-go/user/informers/externalversions/factory.go:101\nI0223 20:04:31.988902 17 reflector.go:219] Starting reflector *v1.OAuthClient (10m0s) from github.com/openshift/client-go/oauth/informers/externalversions/factory.go:101\nI0223 20:04:31.992713 17 reflector.go:219] Starting reflector *v1.ValidatingWebhookConfiguration (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:31.993579 17 reflector.go:219] Starting reflector *v1.Group (10m0s) from github.com/openshift/client-go/user/informers/externalversions/factory.go:101\nI0223 20:04:31.993825 17 dynamic_serving_content.go:130] Starting aggregator-proxy-cert::/etc/kubernetes/static-pod-certs/secrets/aggregator-client/tls.crt::/etc/kubernetes/static-pod-certs/secrets/aggregator-client/tls.key\nI0223 20:04:31.994080 17 reflector.go:219] Starting reflector *v1.APIService (30s) from k8s.io/kube-aggregator/pkg/client/informers/externalversions/factory.go:117\nI0223 20:04:31.994327 17 apiservice_controller.go:97] Starting APIServiceRegistrationController\nI0223 20:04:31.994345 17 cache.go:32] Waiting for caches to sync for APIServiceRegistrationController controller\nI0223 20:04:31.994377 17 clusterquotamapping.go:127] Starting ClusterQuotaMappingController controller\nI0223 20:04:31.994406 17 apf_controller.go:261] Starting API Priority and Fairness config controller\nI0223 20:04:31.994600 17 reflector.go:219] Starting reflector *v1.CustomResourceDefinition (5m0s) from k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/factory.go:117\nI0223 20:04:31.999650 17 controller.go:83] Starting OpenAPI AggregationController\nI0223 20:04:32.000382 17 cluster_authentication_trust_controller.go:440] Starting cluster_authentication_trust_controller controller\nI0223 20:04:32.000464 17 shared_informer.go:240] Waiting for caches to sync for cluster_authentication_trust_controller\nI0223 20:04:32.000558 17 customresource_discovery_controller.go:209] Starting DiscoveryController\nE0223 20:04:32.003495 17 controller.go:152] Unable to remove old endpoints from kubernetes service: StorageError: key not found, Code: 1, Key: /kubernetes.io/masterleases/10.0.171.12, ResourceVersion: 0, AdditionalErrorMsg:\nI0223 20:04:32.016352 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-controller-manager/configmaps/cert-recovery-controller-lock" (user agent "cluster-kube-controller-manager-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:32.019214 17 crdregistration_controller.go:112] Starting crd-autoregister controller\nI0223 20:04:32.019244 17 shared_informer.go:240] Waiting for caches to sync for crd-autoregister\nI0223 20:04:32.019283 17 autoregister_controller.go:141] Starting autoregister controller\nI0223 20:04:32.019293 17 cache.go:32] Waiting for caches to sync for autoregister controller\nI0223 20:04:32.019341 17 dynamic_cafile_content.go:167] Starting client-ca-bundle::/etc/kubernetes/static-pod-certs/configmaps/client-ca/ca-bundle.crt\nI0223 20:04:32.019429 17 dynamic_cafile_content.go:167] Starting request-header::/etc/kubernetes/static-pod-certs/configmaps/aggregator-client-ca/ca-bundle.crt\nI0223 20:04:32.019686 17 reflector.go:219] Starting reflector *v1.ConfigMap (12h0m0s) from k8s.io/kubernetes/pkg/controlplane/controller/clusterauthenticationtrust/cluster_authentication_trust_controller.go:444\nI0223 20:04:32.019967 17 controller.go:86] Starting OpenAPI controller\nI0223 20:04:32.020076 17 naming_controller.go:291] Starting NamingConditionController\nI0223 20:04:32.020121 17 establishing_controller.go:76] Starting EstablishingController\nI0223 20:04:32.020150 17 nonstructuralschema_controller.go:192] Starting NonStructuralSchemaConditionController\nI0223 20:04:32.020177 17 apiapproval_controller.go:186] Starting KubernetesAPIApprovalPolicyConformantConditionController\nI0223 20:04:32.020249 17 crd_finalizer.go:266] Starting CRDFinalizer\nI0223 20:04:32.022420 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/configmaps" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:32.023648 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:32.038409 17 reflector.go:219] Starting reflector *v1beta1.PriorityLevelConfiguration (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.038854 17 reflector.go:219] Starting reflector *v1beta1.FlowSchema (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.039264 17 reflector.go:219] Starting reflector *v1.ClusterRole (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.039657 17 reflector.go:219] Starting reflector *v1.Role (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.040081 17 reflector.go:219] Starting reflector *v1.RoleBinding (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.040491 17 reflector.go:219] Starting reflector *v1.PersistentVolume (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.040899 17 reflector.go:219] Starting reflector *v1.VolumeAttachment (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.041361 17 reflector.go:219] Starting reflector *v1.ServiceAccount (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.041773 17 reflector.go:219] Starting reflector *v1.Pod (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.042244 17 reflector.go:219] Starting reflector *v1.Node (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.042633 17 reflector.go:219] Starting reflector *v1.Service (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.043135 17 reflector.go:219] Starting reflector *v1.IngressClass (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.043567 17 reflector.go:219] Starting reflector *v1.ResourceQuota (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.043979 17 reflector.go:219] Starting reflector *v1.Endpoints (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.044383 17 reflector.go:219] Starting reflector *v1.Namespace (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.044776 17 reflector.go:219] Starting reflector *v1.LimitRange (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.045251 17 reflector.go:219] Starting reflector *v1.MutatingWebhookConfiguration (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.045707 17 reflector.go:219] Starting reflector *v1.Secret (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.046131 17 reflector.go:219] Starting reflector *v1.ClusterRoleBinding (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.046497 17 reflector.go:219] Starting reflector *v1.PriorityClass (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.046860 17 reflector.go:219] Starting reflector *v1.StorageClass (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.047274 17 reflector.go:219] Starting reflector *v1.ClusterResourceQuota (10m0s) from github.com/openshift/client-go/quota/informers/externalversions/factory.go:101\nI0223 20:04:32.047643 17 reflector.go:219] Starting reflector *v1.SecurityContextConstraints (10m0s) from github.com/openshift/client-go/security/informers/externalversions/factory.go:101\nI0223 20:04:32.057622 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/pods" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:32.061870 17 reflector.go:219] Starting reflector *v1.RuntimeClass (10m0s) from k8s.io/client-go/informers/factory.go:134\nI0223 20:04:32.062104 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/pods/kube-apiserver-ip-10-0-171-12.ec2.internal" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:32.068067 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-scheduler/configmaps/cert-recovery-controller-lock" (user agent "cluster-kube-scheduler-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:32.098166 17 cache.go:39] Caches are synced for APIServiceRegistrationController controller\nI0223 20:04:32.110217 17 aggregator.go:231] Updating OpenAPI spec because v1.quota.openshift.io is updated\nI0223 20:04:32.119599 17 cache.go:39] Caches are synced for autoregister controller\nI0223 20:04:32.121790 17 shared_informer.go:247] Caches are synced for cluster_authentication_trust_controller\nI0223 20:04:32.149095 17 sdn_readyz_wait.go:143] reached openshift-oauth-apiserver via SDN after 161 milliseconds\nI0223 20:04:32.155793 17 sdn_readyz_wait.go:143] reached openshift-apiserver via SDN after 168 milliseconds\nI0223 20:04:32.199573 17 apf_controller.go:266] Running API Priority and Fairness config worker\nI0223 20:04:32.284353 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/configmaps/cert-regeneration-controller-lock" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:32.326978 17 cacher.go:782] cacher (*apiregistration.APIService): 1 objects queued in incoming channel.\nI0223 20:04:32.327008 17 cacher.go:782] cacher (*apiregistration.APIService): 2 objects queued in incoming channel.\nI0223 20:04:32.338656 17 cacher.go:782] cacher (*apiregistration.APIService): 3 objects queued in incoming channel.\nI0223 20:04:32.338678 17 cacher.go:782] cacher (*apiregistration.APIService): 4 objects queued in incoming channel.\nI0223 20:04:32.371384 17 cacher.go:782] cacher (*apiregistration.APIService): 1 objects queued in incoming channel.\nI0223 20:04:32.371413 17 cacher.go:782] cacher (*apiregistration.APIService): 2 objects queued in incoming channel.\nI0223 20:04:32.371427 17 cacher.go:782] cacher (*apiregistration.APIService): 3 objects queued in incoming channel.\nI0223 20:04:32.371435 17 cacher.go:782] cacher (*apiregistration.APIService): 4 objects queued in incoming channel.\nI0223 20:04:32.435702 17 shared_informer.go:247] Caches are synced for node_authorizer\nI0223 20:04:32.554171 17 shared_informer.go:266] stop requested\nI0223 20:04:32.554400 17 healthz.go:266] informer-sync,poststarthook/start-apiextensions-controllers,poststarthook/crd-informer-synced,poststarthook/bootstrap-controller,poststarthook/rbac/bootstrap-roles,poststarthook/scheduling/bootstrap-system-priority-classes,poststarthook/apiservice-registration-controller check failed: readyz\n[-]informer-sync failed: 1 informers not started yet: [*v1.Secret]\n[-]poststarthook/start-apiextensions-controllers failed: not finished\n[-]poststarthook/crd-informer-synced failed: not finished\n[-]poststarthook/bootstrap-controller failed: not finished\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\n[-]poststarthook/scheduling/bootstrap-system-priority-classes failed: not finished\n[-]poststarthook/apiservice-registration-controller failed: not finished\nI0223 20:04:32.568794 17 cacher.go:782] cacher (*apiregistration.APIService): 5 objects queued in incoming channel.\nI0223 20:04:32.568826 17 cacher.go:782] cacher (*apiregistration.APIService): 6 objects queued in incoming channel.\nI0223 20:04:32.582224 17 shared_informer.go:266] stop requested\nI0223 20:04:32.582354 17 healthz.go:266] informer-sync,poststarthook/start-apiextensions-controllers,poststarthook/crd-informer-synced,poststarthook/bootstrap-controller,poststarthook/rbac/bootstrap-roles,poststarthook/scheduling/bootstrap-system-priority-classes,poststarthook/apiservice-registration-controller check failed: readyz\n[-]informer-sync failed: 1 informers not started yet: [*v1.Secret]\n[-]poststarthook/start-apiextensions-controllers failed: not finished\n[-]poststarthook/crd-informer-synced failed: not finished\n[-]poststarthook/bootstrap-controller failed: not finished\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\n[-]poststarthook/scheduling/bootstrap-system-priority-classes failed: not finished\n[-]poststarthook/apiservice-registration-controller failed: not finished\nI0223 20:04:32.592793 17 cache.go:39] Caches are synced for AvailableConditionController controller\nI0223 20:04:32.639103 17 trace.go:205] Trace[1727664667]: "List" url:/api/v1/secrets,user-agent:kube-apiserver/v1.20.0+69d7e87 (linux/amd64) kubernetes/69d7e87,client:::1 (23-Feb-2021 20:04:32.090) (total time: 548ms):\nTrace[1727664667]: ---"Writing http response done" count:1728 546ms (20:04:00.639)\nTrace[1727664667]: [548.430464ms] [548.430464ms] END\nI0223 20:04:32.734022 17 shared_informer.go:247] Caches are synced for crd-autoregister\nI0223 20:04:32.924994 17 shared_informer.go:266] stop requested\nI0223 20:04:32.925192 17 healthz.go:266] informer-sync,poststarthook/rbac/bootstrap-roles,poststarthook/scheduling/bootstrap-system-priority-classes check failed: readyz\n[-]informer-sync failed: 1 informers not started yet: [*v1.Secret]\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\n[-]poststarthook/scheduling/bootstrap-system-priority-classes failed: not finished\nI0223 20:04:32.940170 17 cacher.go:782] cacher (*coordination.Lease): 3 objects queued in incoming channel.\nI0223 20:04:32.940285 17 cacher.go:782] cacher (*coordination.Lease): 4 objects queued in incoming channel.\nI0223 20:04:32.940453 17 cacher.go:782] cacher (*coordination.Lease): 5 objects queued in incoming channel.\nI0223 20:04:32.940509 17 cacher.go:782] cacher (*coordination.Lease): 6 objects queued in incoming channel.\nI0223 20:04:32.950683 17 cacher.go:782] cacher (*coordination.Lease): 5 objects queued in incoming channel.\nI0223 20:04:32.950722 17 cacher.go:782] cacher (*coordination.Lease): 6 objects queued in incoming channel.\nI0223 20:04:33.047024 17 storage_scheduling.go:148] all system priority classes are created successfully or already exist.\nI0223 20:04:33.065837 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:33.121512 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/kube-system/configmaps/extension-apiserver-authentication" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.150865 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/pods/kube-apiserver-ip-10-0-171-12.ec2.internal" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.152880 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/kube-system/configmaps/extension-apiserver-authentication" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.160486 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/nodes/ip-10-0-171-12.ec2.internal" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.163211 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/kube-system/configmaps" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.164803 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:33.165803 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/kube-system/configmaps" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.169124 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/kube-system/configmaps" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.169737 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/kube-system/configmaps" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.172355 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/kube-system/configmaps" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.173779 17 patch_genericapiserver.go:120] Loopback request to "/apis/apiextensions.k8s.io/v1/customresourcedefinitions" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.178357 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.191305 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/kube-system/configmaps" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.300656 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:33.418876 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.419887 17 cacher.go:782] cacher (*core.Endpoints): 1 objects queued in incoming channel.\nI0223 20:04:33.419983 17 cacher.go:782] cacher (*core.Endpoints): 2 objects queued in incoming channel.\nI0223 20:04:33.426612 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:33.458762 17 cacher.go:782] cacher (*coordination.Lease): 7 objects queued in incoming channel.\nI0223 20:04:33.458798 17 cacher.go:782] cacher (*coordination.Lease): 8 objects queued in incoming channel.\nI0223 20:04:33.459272 17 cacher.go:782] cacher (*coordination.Lease): 7 objects queued in incoming channel.\nI0223 20:04:33.459295 17 cacher.go:782] cacher (*coordination.Lease): 8 objects queued in incoming channel.\nI0223 20:04:33.459313 17 cacher.go:782] cacher (*coordination.Lease): 9 objects queued in incoming channel.\nI0223 20:04:33.459323 17 cacher.go:782] cacher (*coordination.Lease): 10 objects queued in incoming channel.\nI0223 20:04:33.507334 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:33.571645 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/configmaps" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.633571 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:33.643887 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/configmaps" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.668784 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:33.763936 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:33.767765 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:33.769133 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets/user-serving-cert" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.789537 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets/user-serving-cert-000" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.814748 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets/user-serving-cert-001" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.837839 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets/user-serving-cert-002" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.852398 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets/user-serving-cert-003" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.858925 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets/user-serving-cert-004" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.868831 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:33.871184 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:33.873109 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets/user-serving-cert-005" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.911078 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets/user-serving-cert-006" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.928095 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets/user-serving-cert-007" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.937264 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets/user-serving-cert-008" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:33.960762 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:33.972472 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets/user-serving-cert-009" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:34.017131 17 patch_genericapiserver.go:120] Loopback request to "/apis/apiextensions.k8s.io/v1/customresourcedefinitions" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:34.057750 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:34.074890 17 patch_genericapiserver.go:120] Loopback request to "/apis/controlplane.operator.openshift.io/v1alpha1/namespaces/openshift-kube-apiserver/podnetworkconnectivitychecks" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:34.079881 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:34.189229 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:34.212240 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-apiserver/secrets" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:34.214175 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:34.215264 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:34.215327 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:34.257030 17 store.go:1376] Monitoring podnetworkconnectivitychecks.controlplane.operator.openshift.io count at //controlplane.operator.openshift.io/podnetworkconnectivitychecks\nI0223 20:04:34.303650 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:34.314350 17 patch_genericapiserver.go:120] Loopback request to "/apis/controlplane.operator.openshift.io/v1alpha1/namespaces/openshift-kube-apiserver/podnetworkconnectivitychecks" (user agent "cluster-kube-apiserver-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:34.427213 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:34.477472 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:04:34.498302 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:34.500051 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-controller-manager/configmaps" (user agent "cluster-kube-controller-manager-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:34.563147 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:34.659749 17 aggregator.go:234] Finished OpenAPI spec generation after 2.549381362s\nI0223 20:04:34.659842 17 controller.go:132] OpenAPI AggregationController: action for item : Nothing (removed from the queue).\nI0223 20:04:34.659867 17 controller.go:132] OpenAPI AggregationController: action for item k8s_internal_local_delegation_chain_0000000000: Nothing (removed from the queue).\nI0223 20:04:34.659956 17 aggregator.go:231] Updating OpenAPI spec because v1.packages.operators.coreos.com is updated\nI0223 20:04:34.666744 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:34.796042 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:34.857968 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:34.860151 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:34.981679 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:35.050761 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:35.062969 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:35.157585 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:35.255351 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:35.259441 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:35.380266 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:35.431042 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-controller-manager/configmaps" (user agent "cluster-kube-controller-manager-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:35.469166 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nI0223 20:04:35.472051 17 patch_genericapiserver.go:120] Loopback request to "/api/v1/namespaces/openshift-kube-controller-manager/configmaps" (user agent "cluster-kube-controller-manager-operator/v0.0.0 (linux/amd64) kubernetes/$Format") before server is ready. This client probably does not watch /readyz and might get inconsistent answers.\nI0223 20:04:35.575842 17 healthz.go:266] poststarthook/rbac/bootstrap-roles check failed: readyz\n[-]poststarthook/rbac/bootstrap-roles failed: not finished\nW0223 20:04:35.760333 17 lease.go:233] Resetting endpoints for master service "kubernetes" to [10.0.137.156 10.0.158.175 10.0.171.12]\nI0223 20:04:35.768469 17 controller.go:606] quota admission added evaluator for: endpoints\nI0223 20:04:35.786850 17 controller.go:606] quota admission added evaluator for: endpointslices.discovery.k8s.io\nI0223 20:04:36.206187 17 aggregator.go:234] Finished OpenAPI spec generation after 1.546206836s\nI0223 20:04:36.206474 17 aggregator.go:231] Updating OpenAPI spec because v1.route.openshift.io is updated\nI0223 20:04:37.595803 17 aggregator.go:234] Finished OpenAPI spec generation after 1.389199945s\nI0223 20:04:37.596067 17 aggregator.go:231] Updating OpenAPI spec because v1beta1.metrics.k8s.io is updated\nI0223 20:04:38.679524 17 aggregator.go:234] Finished OpenAPI spec generation after 1.083426942s\nI0223 20:04:38.679641 17 aggregator.go:231] Updating OpenAPI spec because v1.oauth.openshift.io is updated\nI0223 20:04:40.086041 17 aggregator.go:234] Finished OpenAPI spec generation after 1.406346262s\nI0223 20:04:40.086155 17 aggregator.go:231] Updating OpenAPI spec because v1.admission.work.open-cluster-management.io is updated\nI0223 20:04:41.167647 17 aggregator.go:234] Finished OpenAPI spec generation after 1.081471694s\nI0223 20:04:41.167751 17 aggregator.go:231] Updating OpenAPI spec because v1.template.openshift.io is updated\nI0223 20:04:42.069600 17 trace.go:205] Trace[1853756192]: "Reflector ListAndWatch" name:github.com/openshift/client-go/user/informers/externalversions/factory.go:101 (23-Feb-2021 20:04:31.988) (total time: 10081ms):\nTrace[1853756192]: ---"Objects listed" 10080ms (20:04:00.069)\nTrace[1853756192]: [10.081007463s] [10.081007463s] END\nI0223 20:04:42.076148 17 trace.go:205] Trace[193639072]: "Reflector ListAndWatch" name:github.com/openshift/client-go/user/informers/externalversions/factory.go:101 (23-Feb-2021 20:04:31.993) (total time: 10082ms):\nTrace[193639072]: ---"Objects listed" 10082ms (20:04:00.076)\nTrace[193639072]: [10.082518515s] [10.082518515s] END\nI0223 20:04:42.077135 17 trace.go:205] Trace[362510276]: "Reflector ListAndWatch" name:github.com/openshift/client-go/oauth/informers/externalversions/factory.go:101 (23-Feb-2021 20:04:31.988) (total time: 10088ms):\nTrace[362510276]: ---"Objects listed" 10088ms (20:04:00.077)\nTrace[362510276]: [10.088151799s] [10.088151799s] END\nI0223 20:04:42.101985 17 aggregator.go:234] Finished OpenAPI spec generation after 934.212058ms\nI0223 20:04:42.102126 17 aggregator.go:231] Updating OpenAPI spec because v1.security.openshift.io is updated\nI0223 20:04:42.278464 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:42.278519 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:42.296238 17 store.go:1376] Monitoring securitycontextconstraints.security.openshift.io count at //security.openshift.io/securitycontextconstraints\nI0223 20:04:42.327807 17 trace.go:205] Trace[524302058]: "Reflector ListAndWatch" name:github.com/openshift/client-go/security/informers/externalversions/factory.go:101 (23-Feb-2021 20:04:32.047) (total time: 10280ms):\nTrace[524302058]: ---"Objects listed" 10280ms (20:04:00.327)\nTrace[524302058]: [10.280110214s] [10.280110214s] END\nE0223 20:04:42.332600 17 customresource_handler.go:669] error building openapi models for clusterresourcequotas.quota.openshift.io: ERROR $root.definitions.io.openshift.quota.v1.ClusterResourceQuota.properties.spec.properties.quota.properties.hard.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.quota.v1.ClusterResourceQuota.properties.status.properties.namespaces.items..properties.status.properties.hard.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.quota.v1.ClusterResourceQuota.properties.status.properties.namespaces.items..properties.status.properties.used.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.quota.v1.ClusterResourceQuota.properties.status.properties.total.properties.hard.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.quota.v1.ClusterResourceQuota.properties.status.properties.total.properties.used.additionalProperties.schema has invalid property: anyOf\nI0223 20:04:42.333481 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:04:42.333511 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:04:42.338050 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:04:42.356885 17 store.go:1376] Monitoring clusterresourcequotas.quota.openshift.io count at //quota.openshift.io/clusterresourcequotas\nI0223 20:04:42.361422 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:04:42.365515 17 trace.go:205] Trace[378391823]: "Reflector ListAndWatch" name:github.com/openshift/client-go/quota/informers/externalversions/factory.go:101 (23-Feb-2021 20:04:32.047) (total time: 10318ms):\nTrace[378391823]: ---"Objects listed" 10318ms (20:04:00.365)\nTrace[378391823]: [10.318187419s] [10.318187419s] END\nI0223 20:04:43.069230 17 aggregator.go:234] Finished OpenAPI spec generation after 967.069807ms\nI0223 20:04:43.069341 17 aggregator.go:231] Updating OpenAPI spec because v1beta1.proxy.open-cluster-management.io is updated\nI0223 20:04:44.177132 17 aggregator.go:234] Finished OpenAPI spec generation after 1.107754008s\nI0223 20:04:44.177242 17 aggregator.go:231] Updating OpenAPI spec because v1beta1.webhook.certmanager.k8s.io is updated\nI0223 20:04:45.031672 17 aggregator.go:234] Finished OpenAPI spec generation after 854.405751ms\nI0223 20:04:45.031836 17 aggregator.go:231] Updating OpenAPI spec because v1.build.openshift.io is updated\nI0223 20:04:46.104733 17 aggregator.go:234] Finished OpenAPI spec generation after 1.072858175s\nI0223 20:04:46.104862 17 aggregator.go:231] Updating OpenAPI spec because v1.authorization.openshift.io is updated\nI0223 20:04:47.008714 17 aggregator.go:234] Finished OpenAPI spec generation after 903.765534ms\nI0223 20:04:47.008818 17 aggregator.go:231] Updating OpenAPI spec because v1.user.openshift.io is updated\nI0223 20:04:47.866641 17 aggregator.go:234] Finished OpenAPI spec generation after 857.785065ms\nI0223 20:04:47.866751 17 aggregator.go:231] Updating OpenAPI spec because v1.image.openshift.io is updated\nI0223 20:04:48.942829 17 aggregator.go:234] Finished OpenAPI spec generation after 1.076055072s\nI0223 20:04:48.942964 17 aggregator.go:231] Updating OpenAPI spec because v1.admission.hive.openshift.io is updated\nI0223 20:04:49.792957 17 aggregator.go:234] Finished OpenAPI spec generation after 849.967487ms\nI0223 20:04:49.793133 17 aggregator.go:231] Updating OpenAPI spec because v1.project.openshift.io is updated\nI0223 20:04:50.801003 17 aggregator.go:234] Finished OpenAPI spec generation after 1.007841496s\nI0223 20:04:50.801114 17 aggregator.go:231] Updating OpenAPI spec because v1.apps.openshift.io is updated\nI0223 20:04:51.755148 17 aggregator.go:234] Finished OpenAPI spec generation after 954.011929ms\nI0223 20:04:51.756232 17 aggregator.go:231] Updating OpenAPI spec because v1.admission.cluster.open-cluster-management.io is updated\nI0223 20:04:52.779737 17 aggregator.go:234] Finished OpenAPI spec generation after 1.023467174s\nI0223 20:04:52.787770 17 aggregator.go:231] Updating OpenAPI spec because v1.quota.openshift.io is updated\nI0223 20:04:54.072054 17 aggregator.go:234] Finished OpenAPI spec generation after 1.284254972s\nI0223 20:04:54.101510 17 aggregator.go:231] Updating OpenAPI spec because v1.packages.operators.coreos.com is updated\nI0223 20:04:55.205364 17 aggregator.go:234] Finished OpenAPI spec generation after 1.103818735s\nI0223 20:04:58.632214 17 aggregator.go:231] Updating OpenAPI spec because k8s_internal_local_delegation_chain_0000000002 is updated\nI0223 20:05:00.447868 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:05:00.447947 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:05:00.447967 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:05:00.448331 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ed484b0, {CONNECTING }\nI0223 20:05:00.463393 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ed484b0, {READY }\nI0223 20:05:00.465256 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:05:00.952604 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:05:00.952730 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:05:00.952766 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:05:00.952976 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e5dc460, {CONNECTING }\nI0223 20:05:01.047334 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e5dc460, {READY }\nI0223 20:05:01.049071 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:05:01.184226 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:05:01.184331 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:05:01.184349 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:05:01.184580 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01b5e88d0, {CONNECTING }\nI0223 20:05:01.196196 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01b5e88d0, {READY }\nI0223 20:05:01.197034 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:05:01.715749 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:05:01.715829 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:05:01.715846 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:05:01.716165 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02eb64780, {CONNECTING }\nI0223 20:05:01.735664 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02eb64780, {READY }\nI0223 20:05:01.737662 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:05:03.062274 17 aggregator.go:234] Finished OpenAPI spec generation after 4.430017361s\nI0223 20:05:03.445295 17 aggregator.go:231] Updating OpenAPI spec because v1.route.openshift.io is updated\nI0223 20:05:04.897602 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:04.897657 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:04.915464 17 store.go:1376] Monitoring clusterversions.config.openshift.io count at //config.openshift.io/clusterversions\nI0223 20:05:04.944492 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:07.185484 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:07.185544 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:07.205049 17 store.go:1376] Monitoring configurations.serving.knative.dev count at //serving.knative.dev/configurations\nI0223 20:05:07.228437 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:07.654138 17 aggregator.go:234] Finished OpenAPI spec generation after 4.208799782s\nE0223 20:05:07.663276 17 customresource_handler.go:669] error building openapi models for clusterserviceversions.operators.coreos.com: ERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.strategy.properties.rollingUpdate.properties.maxSurge has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.strategy.properties.rollingUpdate.properties.maxUnavailable has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.env.items..properties.valueFrom.properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.lifecycle.properties.postStart.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.lifecycle.properties.postStart.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.lifecycle.properties.preStop.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.lifecycle.properties.preStop.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.livenessProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.livenessProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.readinessProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.readinessProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.startupProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.startupProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.env.items..properties.valueFrom.properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.lifecycle.properties.postStart.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.lifecycle.properties.postStart.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.lifecycle.properties.preStop.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.lifecycle.properties.preStop.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.livenessProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.livenessProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.readinessProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.readinessProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.startupProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.startupProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.env.items..properties.valueFrom.properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.lifecycle.properties.postStart.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.lifecycle.properties.postStart.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.lifecycle.properties.preStop.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.lifecycle.properties.preStop.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.livenessProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.livenessProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.readinessProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.readinessProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.startupProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.startupProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.overhead.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.volumes.items..properties.downwardAPI.properties.items.items..properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.volumes.items..properties.emptyDir.properties.sizeLimit has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.volumes.items..properties.ephemeral.properties.volumeClaimTemplate.properties.spec.properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.volumes.items..properties.ephemeral.properties.volumeClaimTemplate.properties.spec.properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.volumes.items..properties.projected.properties.sources.items..properties.downwardAPI.properties.items.items..properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.webhookdefinitions.items..properties.targetPort has invalid property: anyOf\nI0223 20:05:07.667701 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:07.667752 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:07.678136 17 store.go:1376] Monitoring clusterserviceversions.operators.coreos.com count at //operators.coreos.com/clusterserviceversions\nI0223 20:05:07.691254 17 aggregator.go:231] Updating OpenAPI spec because v1beta1.metrics.k8s.io is updated\nI0223 20:05:08.674654 17 trace.go:205] Trace[1868691782]: "List etcd3" key:/operators.coreos.com/clusterserviceversions,resourceVersion:,resourceVersionMatch:,limit:10000,continue: (23-Feb-2021 20:05:07.679) (total time: 995ms):\nTrace[1868691782]: [995.4145ms] [995.4145ms] END\nI0223 20:05:08.676188 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:08.679737 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.679784 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.698161 17 store.go:1376] Monitoring revisions.serving.knative.dev count at //serving.knative.dev/revisions\nI0223 20:05:08.724867 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:08.754671 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.754723 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.767631 17 store.go:1376] Monitoring subscriptions.messaging.knative.dev count at //messaging.knative.dev/subscriptions\nI0223 20:05:08.769534 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.769574 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.789584 17 store.go:1376] Monitoring subscriptions.messaging.knative.dev count at //messaging.knative.dev/subscriptions\nI0223 20:05:08.810383 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:08.870012 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.870070 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.884241 17 store.go:1376] Monitoring sinkbindings.sources.knative.dev count at //sources.knative.dev/sinkbindings\nI0223 20:05:08.888348 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.888560 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.893263 17 trace.go:205] Trace[779616982]: "Call conversion webhook" custom-resource-definition:subscriptions.messaging.knative.dev,desired-api-version:messaging.knative.dev/v1beta1,object-count:1,UID:dc30bc31-0391-49ed-8c76-86daaa780e14 (23-Feb-2021 20:05:08.794) (total time: 98ms):\nTrace[779616982]: ---"Request completed" 98ms (20:05:00.892)\nTrace[779616982]: [98.488399ms] [98.488399ms] END\nI0223 20:05:08.906377 17 store.go:1376] Monitoring sinkbindings.sources.knative.dev count at //sources.knative.dev/sinkbindings\nI0223 20:05:08.908020 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.908056 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.930733 17 store.go:1376] Monitoring sinkbindings.sources.knative.dev count at //sources.knative.dev/sinkbindings\nI0223 20:05:08.932408 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.932459 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.942661 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:08.946867 17 store.go:1376] Monitoring sinkbindings.sources.knative.dev count at //sources.knative.dev/sinkbindings\nI0223 20:05:08.976732 17 trace.go:205] Trace[417800427]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1alpha1,object-count:1,UID:4b5243e4-7878-436f-be04-be717cb0f5d2 (23-Feb-2021 20:05:08.902) (total time: 74ms):\nTrace[417800427]: ---"Request completed" 74ms (20:05:00.976)\nTrace[417800427]: [74.13198ms] [74.13198ms] END\nI0223 20:05:08.985668 17 trace.go:205] Trace[154168225]: "Call conversion webhook" custom-resource-definition:subscriptions.messaging.knative.dev,desired-api-version:messaging.knative.dev/v1beta1,object-count:1,UID:ae629e81-0e7d-48f1-acd0-a10d6cfbf71d (23-Feb-2021 20:05:08.894) (total time: 91ms):\nTrace[154168225]: ---"Request completed" 91ms (20:05:00.985)\nTrace[154168225]: [91.438968ms] [91.438968ms] END\nI0223 20:05:08.994436 17 trace.go:205] Trace[584246906]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1alpha2,object-count:1,UID:113685ab-0a01-4a89-a631-7df924e2a234 (23-Feb-2021 20:05:08.914) (total time: 79ms):\nTrace[584246906]: ---"Request completed" 79ms (20:05:00.994)\nTrace[584246906]: [79.431148ms] [79.431148ms] END\nI0223 20:05:09.018345 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:09.018401 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:09.031128 17 store.go:1376] Monitoring triggers.eventing.knative.dev count at //eventing.knative.dev/triggers\nI0223 20:05:09.032798 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:09.032846 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:09.051739 17 store.go:1376] Monitoring triggers.eventing.knative.dev count at //eventing.knative.dev/triggers\nI0223 20:05:09.061374 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:09.077620 17 trace.go:205] Trace[522766072]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1alpha2,object-count:1,UID:3f02b86e-279b-48f8-86c5-1f991d16c2bf (23-Feb-2021 20:05:08.995) (total time: 82ms):\nTrace[522766072]: ---"Request completed" 82ms (20:05:00.077)\nTrace[522766072]: [82.519697ms] [82.519697ms] END\nI0223 20:05:09.079213 17 trace.go:205] Trace[1177843340]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1alpha1,object-count:1,UID:03355f47-7e36-4c38-8fac-5d88274d53f2 (23-Feb-2021 20:05:08.993) (total time: 85ms):\nTrace[1177843340]: ---"Request completed" 85ms (20:05:00.079)\nTrace[1177843340]: [85.564957ms] [85.564957ms] END\nI0223 20:05:09.079479 17 trace.go:205] Trace[1358236459]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1,object-count:1,UID:014eb05c-1142-4ab5-9afb-821a9c656d20 (23-Feb-2021 20:05:08.993) (total time: 85ms):\nTrace[1358236459]: ---"Request completed" 85ms (20:05:00.079)\nTrace[1358236459]: [85.687911ms] [85.687911ms] END\nI0223 20:05:09.080737 17 trace.go:205] Trace[1389066300]: "Call conversion webhook" custom-resource-definition:subscriptions.messaging.knative.dev,desired-api-version:messaging.knative.dev/v1beta1,object-count:1,UID:b21ca313-1b4a-4860-ab13-c36b8ee2d75c (23-Feb-2021 20:05:08.986) (total time: 94ms):\nTrace[1389066300]: ---"Request completed" 94ms (20:05:00.080)\nTrace[1389066300]: [94.341421ms] [94.341421ms] END\nI0223 20:05:09.088080 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:09.176930 17 trace.go:205] Trace[499287539]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1,object-count:1,UID:d5cf8bb5-5d16-4497-8097-5809bd169e69 (23-Feb-2021 20:05:09.088) (total time: 87ms):\nTrace[499287539]: ---"Request completed" 87ms (20:05:00.176)\nTrace[499287539]: [87.977259ms] [87.977259ms] END\nI0223 20:05:09.178693 17 trace.go:205] Trace[632851168]: "Call conversion webhook" custom-resource-definition:triggers.eventing.knative.dev,desired-api-version:eventing.knative.dev/v1beta1,object-count:1,UID:ecd63ff4-facd-4a3c-b782-751b20615f5b (23-Feb-2021 20:05:09.085) (total time: 93ms):\nTrace[632851168]: ---"Request completed" 92ms (20:05:00.178)\nTrace[632851168]: [93.051535ms] [93.051535ms] END\nI0223 20:05:09.179793 17 trace.go:205] Trace[2084183409]: "Call conversion webhook" custom-resource-definition:subscriptions.messaging.knative.dev,desired-api-version:messaging.knative.dev/v1beta1,object-count:1,UID:d5ed3cee-18f2-4dd4-837e-46b164169981 (23-Feb-2021 20:05:09.087) (total time: 92ms):\nTrace[2084183409]: ---"Request completed" 92ms (20:05:00.179)\nTrace[2084183409]: [92.490416ms] [92.490416ms] END\nI0223 20:05:09.182656 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:09.183483 17 trace.go:205] Trace[240293913]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1alpha2,object-count:1,UID:78ee597e-16c1-4a1c-98f2-c73004704dfa (23-Feb-2021 20:05:09.088) (total time: 95ms):\nTrace[240293913]: ---"Request completed" 95ms (20:05:00.183)\nTrace[240293913]: [95.411733ms] [95.411733ms] END\nI0223 20:05:09.186208 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:09.190562 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:09.197224 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:12.024965 17 aggregator.go:234] Finished OpenAPI spec generation after 4.333614994s\nI0223 20:05:12.165488 17 aggregator.go:231] Updating OpenAPI spec because v1.oauth.openshift.io is updated\nI0223 20:05:12.669399 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:12.669450 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:12.699059 17 store.go:1376] Monitoring inmemorychannels.messaging.knative.dev count at //messaging.knative.dev/inmemorychannels\nI0223 20:05:12.700787 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:12.700838 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:12.725703 17 store.go:1376] Monitoring inmemorychannels.messaging.knative.dev count at //messaging.knative.dev/inmemorychannels\nI0223 20:05:12.740379 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:12.762181 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:16.195148 17 aggregator.go:234] Finished OpenAPI spec generation after 4.029613456s\nE0223 20:05:16.215542 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:05:16.215571 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:05:16.557343 17 aggregator.go:231] Updating OpenAPI spec because v1.template.openshift.io is updated\nI0223 20:05:20.679964 17 aggregator.go:234] Finished OpenAPI spec generation after 4.12256576s\nI0223 20:05:21.031610 17 aggregator.go:231] Updating OpenAPI spec because v1.security.openshift.io is updated\nI0223 20:05:25.503710 17 aggregator.go:234] Finished OpenAPI spec generation after 4.472044819s\nI0223 20:05:25.572676 17 aggregator.go:231] Updating OpenAPI spec because v1beta1.proxy.open-cluster-management.io is updated\nI0223 20:05:29.829929 17 aggregator.go:234] Finished OpenAPI spec generation after 4.257194009s\nE0223 20:05:29.846154 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:05:29.846186 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nI0223 20:05:30.225057 17 aggregator.go:231] Updating OpenAPI spec because v1.build.openshift.io is updated\nI0223 20:05:30.934679 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:05:30.934734 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:05:30.934750 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:05:30.935192 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc013fb7ed0, {CONNECTING }\nI0223 20:05:30.946085 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc013fb7ed0, {READY }\nI0223 20:05:30.947319 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:05:34.429421 17 aggregator.go:234] Finished OpenAPI spec generation after 4.204325797s\nI0223 20:05:34.799391 17 aggregator.go:231] Updating OpenAPI spec because v1.authorization.openshift.io is updated\nI0223 20:05:36.065011 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:36.065070 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:36.080821 17 store.go:1376] Monitoring helmchartrepositories.helm.openshift.io count at //helm.openshift.io/helmchartrepositories\nI0223 20:05:36.091495 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:36.487193 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:05:36.487271 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:05:36.487287 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:05:36.487479 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03f0eb5a0, {CONNECTING }\nI0223 20:05:36.500723 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03f0eb5a0, {READY }\nI0223 20:05:36.501622 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:05:39.256269 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:05:39.256328 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:05:39.256343 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:05:39.256661 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0216ae7b0, {CONNECTING }\nI0223 20:05:39.274222 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0216ae7b0, {READY }\nI0223 20:05:39.275887 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:05:39.284117 17 aggregator.go:234] Finished OpenAPI spec generation after 4.48468852s\nI0223 20:05:39.436520 17 aggregator.go:231] Updating OpenAPI spec because v1.user.openshift.io is updated\nI0223 20:05:40.178850 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:05:40.178954 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:05:40.178976 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:05:40.179262 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc033638780, {CONNECTING }\nI0223 20:05:40.201690 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc033638780, {READY }\nI0223 20:05:40.203486 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:05:43.618131 17 aggregator.go:234] Finished OpenAPI spec generation after 4.181574968s\nI0223 20:05:44.063046 17 aggregator.go:231] Updating OpenAPI spec because v1.image.openshift.io is updated\nI0223 20:05:48.196309 17 aggregator.go:234] Finished OpenAPI spec generation after 4.133219904s\nE0223 20:05:48.204176 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:05:48.204202 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nI0223 20:05:48.549113 17 aggregator.go:231] Updating OpenAPI spec because v1.project.openshift.io is updated\nI0223 20:05:52.746015 17 aggregator.go:234] Finished OpenAPI spec generation after 4.196864589s\nI0223 20:05:53.112430 17 aggregator.go:231] Updating OpenAPI spec because v1.apps.openshift.io is updated\nI0223 20:05:56.971078 17 aggregator.go:234] Finished OpenAPI spec generation after 3.85861033s\nE0223 20:05:56.980145 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:05:56.980171 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:06:03.860352 17 cacher.go:782] cacher (*rbac.ClusterRole): 1 objects queued in incoming channel.\nI0223 20:06:03.860384 17 cacher.go:782] cacher (*rbac.ClusterRole): 2 objects queued in incoming channel.\nI0223 20:06:09.726852 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:06:09.726927 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:06:09.726944 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:06:09.727181 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc06e54cb00, {CONNECTING }\nI0223 20:06:09.738795 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc06e54cb00, {READY }\nI0223 20:06:09.739840 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:06:10.804974 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:06:10.805043 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:06:10.805062 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:06:10.805355 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc06e747770, {CONNECTING }\nI0223 20:06:10.814642 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc06e747770, {READY }\nI0223 20:06:10.815495 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:06:11.864287 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:11.864428 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:11.880389 17 store.go:1376] Monitoring consolequickstarts.console.openshift.io count at //console.openshift.io/consolequickstarts\nI0223 20:06:11.906613 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:13.250322 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:13.250373 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:13.262132 17 store.go:1376] Monitoring consolenotifications.console.openshift.io count at //console.openshift.io/consolenotifications\nI0223 20:06:13.267480 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nE0223 20:06:16.405081 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:06:16.405112 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:06:17.152060 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:06:17.152125 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:06:17.152137 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:06:17.152217 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023718290, {CONNECTING }\nI0223 20:06:17.166695 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023718290, {READY }\nI0223 20:06:17.168117 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:06:17.755826 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:06:17.755873 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:06:17.755890 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:06:17.756010 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016ef5a50, {CONNECTING }\nI0223 20:06:17.768225 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016ef5a50, {READY }\nI0223 20:06:17.769922 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:06:23.353985 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:23.354028 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:23.369110 17 store.go:1376] Monitoring infrastructures.config.openshift.io count at //config.openshift.io/infrastructures\nI0223 20:06:23.376250 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:23.663927 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:23.663970 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:23.679810 17 store.go:1376] Monitoring clusterautoscalers.autoscaling.openshift.io count at //autoscaling.openshift.io/clusterautoscalers\nI0223 20:06:23.682902 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:25.060090 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:25.060150 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:25.076042 17 store.go:1376] Monitoring proxies.config.openshift.io count at //config.openshift.io/proxies\nI0223 20:06:25.084586 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:25.150789 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:25.151032 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:25.167870 17 store.go:1376] Monitoring ingresses.config.openshift.io count at //config.openshift.io/ingresses\nI0223 20:06:25.175988 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:25.197194 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:25.197244 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:25.213266 17 store.go:1376] Monitoring networks.config.openshift.io count at //config.openshift.io/networks\nI0223 20:06:25.218690 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:25.244949 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:25.245005 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:25.255412 17 store.go:1376] Monitoring apiservers.config.openshift.io count at //config.openshift.io/apiservers\nI0223 20:06:25.267658 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:25.286223 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:25.286260 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:25.298314 17 store.go:1376] Monitoring consoles.config.openshift.io count at //config.openshift.io/consoles\nI0223 20:06:25.308087 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:25.329369 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:25.329409 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:25.341317 17 store.go:1376] Monitoring projects.config.openshift.io count at //config.openshift.io/projects\nI0223 20:06:25.344898 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nE0223 20:06:25.372533 17 customresource_handler.go:669] error building openapi models for builds.config.openshift.io: ERROR $root.definitions.io.openshift.config.v1.Build.properties.spec.properties.buildDefaults.properties.env.items..properties.valueFrom.properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nERROR $root.definitions.io.openshift.config.v1.Build.properties.spec.properties.buildDefaults.properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.config.v1.Build.properties.spec.properties.buildDefaults.properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nI0223 20:06:25.373322 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:25.373372 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:25.384166 17 store.go:1376] Monitoring builds.config.openshift.io count at //config.openshift.io/builds\nI0223 20:06:25.400470 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:25.413993 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:25.414039 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:25.424360 17 store.go:1376] Monitoring authentications.config.openshift.io count at //config.openshift.io/authentications\nI0223 20:06:25.438616 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:25.454760 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:25.454809 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:25.464403 17 store.go:1376] Monitoring dnses.config.openshift.io count at //config.openshift.io/dnses\nI0223 20:06:25.470023 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:25.821845 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:25.821889 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:25.834724 17 store.go:1376] Monitoring images.config.openshift.io count at //config.openshift.io/images\nI0223 20:06:25.839432 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:26.459176 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:26.459224 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:26.471847 17 store.go:1376] Monitoring schedulers.config.openshift.io count at //config.openshift.io/schedulers\nI0223 20:06:26.478613 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:26.499374 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:26.499423 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:26.511287 17 store.go:1376] Monitoring featuregates.config.openshift.io count at //config.openshift.io/featuregates\nI0223 20:06:26.516264 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:26.594788 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:26.594838 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:26.612875 17 store.go:1376] Monitoring oauths.config.openshift.io count at //config.openshift.io/oauths\nI0223 20:06:26.618762 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:06:26.727218 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:06:26.727279 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:06:26.739099 17 store.go:1376] Monitoring operatorhubs.config.openshift.io count at //config.openshift.io/operatorhubs\nI0223 20:06:26.752852 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nE0223 20:06:29.851397 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:06:29.851427 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nI0223 20:06:45.041060 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:06:45.041107 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:06:45.041118 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:06:45.041197 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d1d1e60, {CONNECTING }\nI0223 20:06:45.051658 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d1d1e60, {READY }\nI0223 20:06:45.052613 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:06:48.211149 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:06:48.211183 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nI0223 20:06:50.035609 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:06:50.035656 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:06:50.035668 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:06:50.035934 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0205140e0, {CONNECTING }\nI0223 20:06:50.048163 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0205140e0, {READY }\nI0223 20:06:50.049972 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:06:50.865458 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:06:50.865503 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:06:50.865513 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:06:50.865812 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023624b90, {CONNECTING }\nI0223 20:06:50.875200 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023624b90, {READY }\nI0223 20:06:50.876133 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:06:53.144098 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:06:53.144157 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:06:53.144176 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:06:53.144256 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0218bb950, {CONNECTING }\nI0223 20:06:53.156400 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0218bb950, {READY }\nI0223 20:06:53.157754 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:06:56.990758 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:06:56.990789 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:07:13.580509 17 customresource_handler.go:669] error building openapi models for storageclusters.ocs.openshift.io: ERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.monPVCTemplate.properties.spec.properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.monPVCTemplate.properties.spec.properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.monPVCTemplate.properties.status.properties.capacity.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.multiCloudGateway.properties.endpoints.properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.multiCloudGateway.properties.endpoints.properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.resources.additionalProperties.schema.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.resources.additionalProperties.schema.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.storageDeviceSets.items..properties.dataPVCTemplate.properties.spec.properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.storageDeviceSets.items..properties.dataPVCTemplate.properties.spec.properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.storageDeviceSets.items..properties.dataPVCTemplate.properties.status.properties.capacity.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.storageDeviceSets.items..properties.metadataPVCTemplate.properties.spec.properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.storageDeviceSets.items..properties.metadataPVCTemplate.properties.spec.properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.storageDeviceSets.items..properties.metadataPVCTemplate.properties.status.properties.capacity.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.storageDeviceSets.items..properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.openshift.ocs.v1.StorageCluster.properties.spec.properties.storageDeviceSets.items..properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nI0223 20:07:13.583161 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:07:13.583207 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:07:13.597257 17 store.go:1376] Monitoring storageclusters.ocs.openshift.io count at //ocs.openshift.io/storageclusters\nI0223 20:07:13.608204 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:07:13.636173 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:07:13.636213 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:07:13.648311 17 store.go:1376] Monitoring provisionings.metal3.io count at //metal3.io/provisionings\nI0223 20:07:13.651710 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:07:13.680333 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:07:13.680384 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:07:13.693416 17 store.go:1376] Monitoring consolelinks.console.openshift.io count at //console.openshift.io/consolelinks\nI0223 20:07:13.701077 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:07:15.119466 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:07:15.119523 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:07:15.119538 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:07:15.119773 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f178260, {CONNECTING }\nI0223 20:07:15.128680 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f178260, {READY }\nI0223 20:07:15.129517 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:07:21.323679 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:07:21.323785 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:07:21.323804 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:07:21.324078 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01cba8870, {CONNECTING }\nI0223 20:07:21.338013 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01cba8870, {READY }\nI0223 20:07:21.339609 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:07:30.657586 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:07:30.657645 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:07:30.657663 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:07:30.657770 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc017011760, {CONNECTING }\nI0223 20:07:30.667893 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc017011760, {READY }\nI0223 20:07:30.668718 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:07:31.994177 17 dynamic_serving_content.go:111] Loaded a new cert/key pair for "aggregator-proxy-cert::/etc/kubernetes/static-pod-certs/secrets/aggregator-client/tls.crt::/etc/kubernetes/static-pod-certs/secrets/aggregator-client/tls.key"\nE0223 20:07:33.005735 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:07:33.005763 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:07:33.020630 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:07:33.020662 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:07:33.034550 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:07:33.034577 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:07:33.049431 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:07:33.049456 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nI0223 20:07:36.391356 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:07:36.391405 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:07:36.391421 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:07:36.391650 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc058830f60, {CONNECTING }\nI0223 20:07:36.403907 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc058830f60, {READY }\nI0223 20:07:36.405512 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:07:45.357701 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:07:45.357760 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:07:45.357778 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:07:45.357976 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01f70e580, {CONNECTING }\nI0223 20:07:45.366979 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01f70e580, {READY }\nI0223 20:07:45.367881 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:07:56.812383 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:07:56.812435 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:07:56.823839 17 store.go:1376] Monitoring consoles.operator.openshift.io count at //operator.openshift.io/consoles\nI0223 20:07:56.834377 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:08:03.324327 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:08:03.324406 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:08:03.324421 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:08:03.324534 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc025ad4bb0, {CONNECTING }\nI0223 20:08:03.337114 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc025ad4bb0, {READY }\nI0223 20:08:03.338922 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:08:05.528702 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:08:05.528847 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:08:05.528875 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:08:05.529143 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc026d35c70, {CONNECTING }\nI0223 20:08:05.538697 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc026d35c70, {READY }\nI0223 20:08:05.539729 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:08:17.801198 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:08:17.801256 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:08:17.801268 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:08:17.801496 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023de1ce0, {CONNECTING }\nI0223 20:08:17.816322 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023de1ce0, {READY }\nI0223 20:08:17.817782 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:08:19.855773 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:08:19.855831 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:08:19.855846 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:08:19.856091 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c32a220, {CONNECTING }\nI0223 20:08:19.865397 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c32a220, {READY }\nI0223 20:08:19.866622 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:08:33.019207 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:08:33.019239 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:08:33.027834 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:08:33.027860 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:08:33.048271 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:08:33.048295 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:08:33.051060 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:08:33.051088 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nI0223 20:08:35.650018 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:08:35.650080 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:08:35.650113 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:08:35.650433 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02bcab4d0, {CONNECTING }\nI0223 20:08:35.663989 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02bcab4d0, {READY }\nI0223 20:08:35.665176 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:08:37.563631 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:08:37.563766 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:08:37.563812 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:08:37.564033 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0169d72d0, {CONNECTING }\nI0223 20:08:37.577815 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0169d72d0, {READY }\nI0223 20:08:37.579322 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:08:41.300153 17 controller.go:606] quota admission added evaluator for: deployments.apps\nI0223 20:08:41.300220 17 controller.go:606] quota admission added evaluator for: deployments.apps\nI0223 20:08:45.570439 17 controller.go:606] quota admission added evaluator for: rolebindings.rbac.authorization.k8s.io\nI0223 20:08:45.570524 17 controller.go:606] quota admission added evaluator for: rolebindings.rbac.authorization.k8s.io\nI0223 20:08:51.252876 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:08:51.252931 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:08:51.252948 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:08:51.253421 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0218baa20, {CONNECTING }\nI0223 20:08:51.266626 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0218baa20, {READY }\nI0223 20:08:51.267747 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:08:52.456717 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:08:52.456760 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:08:52.456775 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:08:52.456871 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b39a730, {CONNECTING }\nI0223 20:08:52.468584 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b39a730, {READY }\nI0223 20:08:52.469975 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:08:53.443295 17 trace.go:205] Trace[944432383]: "List" url:/apis/console.openshift.io/v1/consolequickstarts,user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74,client:::1 (23-Feb-2021 20:08:52.009) (total time: 1433ms):\nTrace[944432383]: ---"Writing http response done" count:11 1423ms (20:08:00.443)\nTrace[944432383]: [1.433995653s] [1.433995653s] END\nI0223 20:09:08.990705 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:09:08.990764 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:09:08.990783 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:09:08.991017 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016f50240, {CONNECTING }\nI0223 20:09:09.001875 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016f50240, {READY }\nI0223 20:09:09.003444 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:09:10.544180 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:09:10.544281 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:09:10.544302 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:09:10.544442 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f0ba160, {CONNECTING }\nI0223 20:09:10.554289 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f0ba160, {READY }\nI0223 20:09:10.555643 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:09:21.707317 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:09:21.707393 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:09:21.707410 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:09:21.707653 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016448a40, {CONNECTING }\nI0223 20:09:21.716168 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016448a40, {READY }\nI0223 20:09:21.717079 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:09:33.054039 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:09:33.054113 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:09:33.054132 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:09:33.054460 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01a8ea5f0, {CONNECTING }\nI0223 20:09:33.070404 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01a8ea5f0, {READY }\nI0223 20:09:33.072310 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:09:33.096295 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:09:33.096393 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:09:33.124679 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:09:33.124706 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:09:33.147802 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:09:33.147896 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:09:33.165237 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:09:33.165335 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:09:42.572742 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:09:42.572787 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:09:42.572798 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:09:42.572897 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0163afc10, {CONNECTING }\nI0223 20:09:42.582227 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0163afc10, {READY }\nI0223 20:09:42.583187 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:09:52.357329 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:09:52.357376 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:09:52.357387 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:09:52.357481 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029d8b680, {CONNECTING }\nI0223 20:09:52.366646 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029d8b680, {READY }\nI0223 20:09:52.367950 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:09:52.525620 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:09:52.525677 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:09:52.525695 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:09:52.525903 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029e19090, {CONNECTING }\nI0223 20:09:52.538015 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029e19090, {READY }\nI0223 20:09:52.539458 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:10:15.014856 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:10:15.014900 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:10:15.014933 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:10:15.015084 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fbf1250, {CONNECTING }\nI0223 20:10:15.027851 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fbf1250, {READY }\nI0223 20:10:15.029309 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:10:17.936414 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:10:17.936471 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:10:17.936485 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:10:17.936618 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03003ec70, {CONNECTING }\nI0223 20:10:17.945721 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03003ec70, {READY }\nI0223 20:10:17.947739 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:10:31.808885 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:10:31.808962 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:10:31.808978 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:10:31.809279 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034cf9890, {CONNECTING }\nI0223 20:10:31.821545 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034cf9890, {READY }\nI0223 20:10:31.822628 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:10:33.103784 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:10:33.103817 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:10:33.138638 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:10:33.138670 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:10:33.153111 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:10:33.153142 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:10:33.166833 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:10:33.166862 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:10:33.929005 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:10:33.929051 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:10:33.929062 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:10:33.929134 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc035129230, {CONNECTING }\nI0223 20:10:33.940443 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc035129230, {READY }\nI0223 20:10:33.942289 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:10:49.005611 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:10:49.005665 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:10:49.005684 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:10:49.005966 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01504ee40, {CONNECTING }\nI0223 20:10:49.019331 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01504ee40, {READY }\nI0223 20:10:49.020609 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:10:55.772572 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:10:55.772615 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:10:55.772629 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:10:55.772836 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc009036e90, {CONNECTING }\nI0223 20:10:55.782151 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc009036e90, {READY }\nI0223 20:10:55.783073 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:11:06.107845 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:11:06.107941 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:11:06.107965 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:11:06.108075 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc011196ca0, {CONNECTING }\nI0223 20:11:06.124557 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc011196ca0, {READY }\nI0223 20:11:06.125630 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:11:06.688503 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:11:06.688598 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:11:06.688615 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:11:06.689031 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01180e410, {CONNECTING }\nI0223 20:11:06.709294 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01180e410, {READY }\nI0223 20:11:06.711524 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:11:08.960059 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:11:08.960144 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:11:08.961124 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:11:25.859261 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:11:25.859303 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:11:25.859319 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:11:25.859420 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc045e28ee0, {CONNECTING }\nI0223 20:11:25.872253 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc045e28ee0, {READY }\nI0223 20:11:25.874494 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:11:30.207131 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:11:30.207204 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:11:30.207218 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:11:30.207421 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01dc0cb20, {CONNECTING }\nI0223 20:11:30.217720 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01dc0cb20, {READY }\nI0223 20:11:30.218600 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:11:46.261894 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:11:46.261995 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:11:46.262014 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:11:46.262176 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0434195b0, {CONNECTING }\nI0223 20:11:46.275517 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0434195b0, {READY }\nI0223 20:11:46.277446 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:11:49.094371 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:11:49.094420 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:11:49.094433 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:11:49.094508 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ab3cf90, {CONNECTING }\nI0223 20:11:49.104664 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ab3cf90, {READY }\nI0223 20:11:49.105475 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:11:56.801165 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 20:11:56.801304 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:11:56.802531 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:11:56.803619 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:12:01.208268 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:12:01.208322 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:12:01.208338 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:12:01.208683 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0287cef40, {CONNECTING }\nI0223 20:12:01.222862 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0287cef40, {READY }\nI0223 20:12:01.224436 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:12:03.185258 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:12:03.185303 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:12:03.185314 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:12:03.185572 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ae45c50, {CONNECTING }\nI0223 20:12:03.195074 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ae45c50, {READY }\nI0223 20:12:03.195891 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:12:16.592136 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:12:16.592187 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:12:16.592202 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:12:16.592456 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0243217f0, {CONNECTING }\nI0223 20:12:16.604563 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0243217f0, {READY }\nI0223 20:12:16.606111 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:12:29.873342 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:12:29.873393 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:12:29.873410 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:12:29.873575 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00d056e80, {CONNECTING }\nI0223 20:12:29.885234 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00d056e80, {READY }\nI0223 20:12:29.886196 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:12:33.114362 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:12:33.114388 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:12:33.140452 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:12:33.140486 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:12:33.163553 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:12:33.163585 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:12:33.173268 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:12:33.173292 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:12:39.796387 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:12:39.796454 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:12:39.796471 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:12:39.796874 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0125c8290, {CONNECTING }\nI0223 20:12:39.809814 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0125c8290, {READY }\nI0223 20:12:39.812054 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:12:46.219241 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:12:46.219315 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:12:46.219335 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:12:46.219717 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0133b1830, {CONNECTING }\nI0223 20:12:46.230203 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0133b1830, {READY }\nI0223 20:12:46.231106 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:12:53.478260 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:12:53.478320 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:12:53.478339 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:12:53.478610 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01469ea90, {CONNECTING }\nI0223 20:12:53.492487 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01469ea90, {READY }\nI0223 20:12:53.494097 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:13:09.919257 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:13:09.919313 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:13:09.919331 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:13:09.919619 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc022779b30, {CONNECTING }\nI0223 20:13:09.929152 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc022779b30, {READY }\nI0223 20:13:09.929892 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:13:17.254820 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:13:17.254990 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:13:17.255021 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:13:17.255283 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e180180, {CONNECTING }\nI0223 20:13:17.265182 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e180180, {READY }\nI0223 20:13:17.265959 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:13:23.718206 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:13:23.718265 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:13:23.718301 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:13:23.718606 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc020398fa0, {CONNECTING }\nI0223 20:13:23.729848 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc020398fa0, {READY }\nI0223 20:13:23.731329 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:13:23.734998 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:13:23.735046 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:13:23.735061 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:13:23.735337 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01f5a63d0, {CONNECTING }\nI0223 20:13:23.747507 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01f5a63d0, {READY }\nI0223 20:13:23.748922 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:13:51.656873 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:13:51.657003 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:13:51.657029 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:13:51.658412 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02be84270, {CONNECTING }\nI0223 20:13:51.667966 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02be84270, {READY }\nI0223 20:13:51.669222 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:13:53.770053 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:13:53.770102 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:13:53.770119 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:13:53.770370 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c90ad90, {CONNECTING }\nI0223 20:13:53.783998 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c90ad90, {READY }\nI0223 20:13:53.787361 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:13:54.415807 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:13:54.415867 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:13:54.415884 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:13:54.416064 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c6e7de0, {CONNECTING }\nI0223 20:13:54.425989 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c6e7de0, {READY }\nI0223 20:13:54.427471 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:13:55.235540 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:13:55.235602 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:13:55.235619 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:13:55.235835 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ca552e0, {CONNECTING }\nI0223 20:13:55.248477 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ca552e0, {READY }\nI0223 20:13:55.249851 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:14:24.544617 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:14:24.544668 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:14:24.544686 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:14:24.544983 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc022f58a70, {CONNECTING }\nI0223 20:14:24.559831 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc022f58a70, {READY }\nI0223 20:14:24.561419 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:14:27.296543 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:14:27.296604 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:14:27.296615 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:14:27.296703 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01341a2e0, {CONNECTING }\nI0223 20:14:27.307691 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01341a2e0, {READY }\nI0223 20:14:27.308752 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:14:29.419263 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:14:29.419308 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:14:29.419319 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:14:29.419448 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c7a3850, {CONNECTING }\nI0223 20:14:29.433189 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c7a3850, {READY }\nI0223 20:14:29.434749 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:14:31.937260 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:14:31.937319 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:14:31.937336 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:14:31.937609 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00a4c5dc0, {CONNECTING }\nI0223 20:14:31.950201 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00a4c5dc0, {READY }\nI0223 20:14:31.951898 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:14:33.098899 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:14:33.099004 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:14:33.116301 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:14:33.116323 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:14:33.126876 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:14:33.129369 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:14:33.142136 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:14:33.142194 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:14:57.487353 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:14:57.487418 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:14:57.487435 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:14:57.487867 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c564480, {CONNECTING }\nI0223 20:14:57.497307 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c564480, {READY }\nI0223 20:14:57.498464 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:15:04.359470 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:15:04.359526 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:15:04.359577 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:15:04.359809 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02af5a800, {CONNECTING }\nI0223 20:15:04.371154 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02af5a800, {READY }\nI0223 20:15:04.374782 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:15:10.023837 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:15:10.023887 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:15:10.023902 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:15:10.024153 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015b36240, {CONNECTING }\nI0223 20:15:10.034075 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015b36240, {READY }\nI0223 20:15:10.035122 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:15:11.377296 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:15:11.377353 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:15:11.377371 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:15:11.377720 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc009b73090, {CONNECTING }\nI0223 20:15:11.393845 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc009b73090, {READY }\nI0223 20:15:11.395479 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:15:28.205460 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:15:28.205508 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:15:28.205526 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:15:28.205779 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015e44080, {CONNECTING }\nI0223 20:15:28.215015 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015e44080, {READY }\nI0223 20:15:28.216006 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:15:33.114113 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:15:33.114139 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:15:33.121389 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:15:33.121417 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:15:33.136619 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:15:33.136646 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:15:33.157182 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:15:33.157208 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:15:42.004286 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:15:42.004344 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:15:42.004362 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:15:42.004561 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023f3e8f0, {CONNECTING }\nI0223 20:15:42.018226 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023f3e8f0, {READY }\nI0223 20:15:42.019875 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:15:43.315937 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:15:43.315993 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:15:43.316011 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:15:43.316347 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc026a7b080, {CONNECTING }\nI0223 20:15:43.330823 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc026a7b080, {READY }\nI0223 20:15:43.332457 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:15:46.760062 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:15:46.760113 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:15:46.760129 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:15:46.760592 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014158180, {CONNECTING }\nI0223 20:15:46.770807 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014158180, {READY }\nI0223 20:15:46.772113 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:16:04.596613 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:16:04.596670 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:16:04.596704 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:16:04.597072 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc024838a00, {CONNECTING }\nI0223 20:16:04.611838 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc024838a00, {READY }\nI0223 20:16:04.614011 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:16:07.555621 17 cacher.go:782] cacher (*unstructured.Unstructured): 1 objects queued in incoming channel.\nI0223 20:16:07.555649 17 cacher.go:782] cacher (*unstructured.Unstructured): 2 objects queued in incoming channel.\nI0223 20:16:14.327452 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:16:14.327521 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:16:14.327540 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:16:14.327797 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d5caad0, {CONNECTING }\nI0223 20:16:14.340700 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d5caad0, {READY }\nI0223 20:16:14.342376 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:16:22.129883 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:16:22.129987 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:16:22.130005 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:16:22.130301 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02036ba40, {CONNECTING }\nI0223 20:16:22.147815 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02036ba40, {READY }\nI0223 20:16:22.152162 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:16:28.619718 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:16:28.619769 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:16:28.619786 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:16:28.620013 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc022431ec0, {CONNECTING }\nI0223 20:16:28.629594 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc022431ec0, {READY }\nI0223 20:16:28.631227 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:16:36.620413 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:16:36.620456 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:16:36.620467 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:16:36.620553 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d90d550, {CONNECTING }\nI0223 20:16:36.631081 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d90d550, {READY }\nI0223 20:16:36.632053 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:16:56.001485 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:16:56.001615 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:16:56.001634 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:16:56.001750 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0151277d0, {CONNECTING }\nI0223 20:16:56.014038 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0151277d0, {READY }\nI0223 20:16:56.015425 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:16:56.891314 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:16:56.891367 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:16:56.891384 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:16:56.891444 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0092c0130, {CONNECTING }\nI0223 20:16:56.908322 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0092c0130, {READY }\nI0223 20:16:56.909498 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:17:07.580839 17 cacher.go:782] cacher (*unstructured.Unstructured): 3 objects queued in incoming channel.\nI0223 20:17:07.580872 17 cacher.go:782] cacher (*unstructured.Unstructured): 4 objects queued in incoming channel.\nI0223 20:17:08.940785 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:17:08.940830 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:17:08.940844 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:17:08.941041 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015a123b0, {CONNECTING }\nI0223 20:17:08.951605 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015a123b0, {READY }\nI0223 20:17:08.953080 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:17:15.425168 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:17:15.425224 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:17:15.425242 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:17:15.425747 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0130b80c0, {CONNECTING }\nI0223 20:17:15.435226 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0130b80c0, {READY }\nI0223 20:17:15.436149 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:17:29.608892 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:17:29.609008 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:17:29.609033 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:17:29.609330 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01477c7b0, {CONNECTING }\nI0223 20:17:29.621542 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01477c7b0, {READY }\nI0223 20:17:29.623189 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:17:33.130539 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:17:33.130577 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:17:33.142899 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:17:33.142951 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:17:33.155160 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:17:33.155190 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:17:33.177825 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:17:33.177856 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:17:36.495116 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:17:36.495330 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:17:36.495450 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:17:36.495871 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e87b240, {CONNECTING }\nI0223 20:17:36.518207 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e87b240, {READY }\nI0223 20:17:36.519650 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:17:50.175850 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:17:50.175956 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:17:50.175973 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:17:50.176171 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ab6e9b0, {CONNECTING }\nI0223 20:17:50.193341 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ab6e9b0, {READY }\nI0223 20:17:50.194252 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:17:56.580848 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:17:56.580893 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:17:56.580945 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:17:56.581057 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02809b660, {CONNECTING }\nI0223 20:17:56.591267 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02809b660, {READY }\nI0223 20:17:56.592255 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:18:02.247595 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:18:02.247713 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:18:02.249059 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:18:05.366328 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:18:05.366394 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:18:05.366410 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:18:05.366667 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b7d5db0, {CONNECTING }\nI0223 20:18:05.379129 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b7d5db0, {READY }\nI0223 20:18:05.380706 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:18:18.782049 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:18:18.782091 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:18:18.782102 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:18:18.782213 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c9bfec0, {CONNECTING }\nI0223 20:18:18.795395 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c9bfec0, {READY }\nI0223 20:18:18.796759 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:18:26.998862 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:18:26.998957 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:18:26.998977 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:18:26.999448 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d528730, {CONNECTING }\nI0223 20:18:27.009876 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d528730, {READY }\nI0223 20:18:27.011254 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:18:40.488703 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:18:40.488749 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:18:40.488763 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:18:40.489184 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0227fc370, {CONNECTING }\nI0223 20:18:40.500126 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0227fc370, {READY }\nI0223 20:18:40.501399 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:18:41.778954 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:18:41.779034 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:18:41.779051 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:18:41.779369 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b39bfb0, {CONNECTING }\nI0223 20:18:41.792471 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b39bfb0, {READY }\nI0223 20:18:41.793857 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:19:01.170210 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:19:01.170264 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:19:01.170281 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:19:01.170490 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc012e3c480, {CONNECTING }\nI0223 20:19:01.184932 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc012e3c480, {READY }\nI0223 20:19:01.186368 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:19:07.175949 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:19:07.176120 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:19:07.176150 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:19:07.176264 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e841280, {CONNECTING }\nI0223 20:19:07.201880 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e841280, {READY }\nI0223 20:19:07.202874 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:19:12.110691 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:19:12.111012 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:19:12.111183 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:19:12.111739 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01f0cf7f0, {CONNECTING }\nI0223 20:19:12.126528 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01f0cf7f0, {READY }\nI0223 20:19:12.128887 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:19:24.245167 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:19:24.245222 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:19:24.245235 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:19:24.245321 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0286bdfc0, {CONNECTING }\nI0223 20:19:24.257304 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0286bdfc0, {READY }\nI0223 20:19:24.258917 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:19:33.121496 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:19:33.121705 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:19:33.137502 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:19:33.137541 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:19:33.164130 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:19:33.164246 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:19:33.182731 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:19:33.182859 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:19:38.073712 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:19:38.073802 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:19:38.073833 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:19:38.074220 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0354c4540, {CONNECTING }\nI0223 20:19:38.089533 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0354c4540, {READY }\nI0223 20:19:38.091040 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:19:43.505784 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:19:43.505847 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:19:43.505865 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:19:43.506402 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02dd6d4c0, {CONNECTING }\nI0223 20:19:43.518817 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02dd6d4c0, {READY }\nI0223 20:19:43.520386 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:19:44.796836 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:19:44.796896 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:19:44.796930 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:19:44.797405 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02e288780, {CONNECTING }\nI0223 20:19:44.807114 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02e288780, {READY }\nI0223 20:19:44.808080 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:19:54.275580 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:19:54.275639 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:19:54.275655 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:19:54.275885 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02025a0a0, {CONNECTING }\nI0223 20:19:54.287391 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02025a0a0, {READY }\nI0223 20:19:54.289012 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:20:00.562199 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 20:20:00.562434 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:20:00.563552 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:20:00.564708 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nE0223 20:20:12.652236 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 20:20:12.652298 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:20:12.653496 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:20:12.654832 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:20:13.001199 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:20:13.001244 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:20:13.001256 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:20:13.001494 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c60fb70, {CONNECTING }\nI0223 20:20:13.013824 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c60fb70, {READY }\nI0223 20:20:13.015165 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:20:28.038534 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:20:28.038579 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:20:28.038590 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:20:28.038880 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02990bba0, {CONNECTING }\nI0223 20:20:28.051316 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02990bba0, {READY }\nI0223 20:20:28.052458 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:20:29.392841 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:20:29.392886 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:20:29.392900 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:20:29.393075 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029a15ac0, {CONNECTING }\nI0223 20:20:29.402977 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029a15ac0, {READY }\nI0223 20:20:29.403840 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:20:30.023570 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:20:30.023613 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:20:30.023624 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:20:30.023726 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029b412f0, {CONNECTING }\nI0223 20:20:30.034704 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029b412f0, {READY }\nI0223 20:20:30.036001 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:20:33.135943 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:20:33.135977 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:20:33.142583 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:20:33.142614 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:20:33.170265 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:20:33.170298 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:20:33.196894 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:20:33.196936 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:20:44.928073 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:20:44.928120 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:20:44.928132 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:20:44.929316 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00ea65340, {CONNECTING }\nI0223 20:20:44.948304 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00ea65340, {READY }\nI0223 20:20:44.950235 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:20:47.208399 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:47.208455 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:47.225657 17 store.go:1376] Monitoring services.serving.knative.dev count at //serving.knative.dev/services\nI0223 20:20:47.247817 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:47.857576 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:47.857623 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:47.870245 17 store.go:1376] Monitoring routes.serving.knative.dev count at //serving.knative.dev/routes\nI0223 20:20:47.885130 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:48.947820 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:48.947873 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:48.961196 17 store.go:1376] Monitoring containersources.sources.knative.dev count at //sources.knative.dev/containersources\nI0223 20:20:48.964060 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:48.964109 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:48.966682 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:48.981650 17 store.go:1376] Monitoring containersources.sources.knative.dev count at //sources.knative.dev/containersources\nI0223 20:20:48.985140 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:48.985187 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:48.987028 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:48.999345 17 store.go:1376] Monitoring containersources.sources.knative.dev count at //sources.knative.dev/containersources\nI0223 20:20:49.005549 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:51.498408 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:51.498451 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:51.509678 17 store.go:1376] Monitoring apiserversources.sources.knative.dev count at //sources.knative.dev/apiserversources\nI0223 20:20:51.512184 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:51.512304 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:51.522872 17 store.go:1376] Monitoring apiserversources.sources.knative.dev count at //sources.knative.dev/apiserversources\nI0223 20:20:51.525809 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:51.525856 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:51.543218 17 store.go:1376] Monitoring apiserversources.sources.knative.dev count at //sources.knative.dev/apiserversources\nI0223 20:20:51.545264 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:51.545439 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:51.555210 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:51.562299 17 store.go:1376] Monitoring apiserversources.sources.knative.dev count at //sources.knative.dev/apiserversources\nI0223 20:20:51.676854 17 trace.go:205] Trace[44294503]: "Call conversion webhook" custom-resource-definition:apiserversources.sources.knative.dev,desired-api-version:sources.knative.dev/v1alpha2,object-count:1,UID:b82262d3-6872-45cc-979a-ba51ab9faa7d (23-Feb-2021 20:20:51.594) (total time: 82ms):\nTrace[44294503]: ---"Request completed" 82ms (20:20:00.676)\nTrace[44294503]: [82.326946ms] [82.326946ms] END\nI0223 20:20:51.677156 17 trace.go:205] Trace[1957840350]: "Call conversion webhook" custom-resource-definition:apiserversources.sources.knative.dev,desired-api-version:sources.knative.dev/v1alpha1,object-count:1,UID:82c52a56-1f85-4abd-8442-65f8a68a6bea (23-Feb-2021 20:20:51.594) (total time: 82ms):\nTrace[1957840350]: ---"Request completed" 82ms (20:20:00.677)\nTrace[1957840350]: [82.971132ms] [82.971132ms] END\nI0223 20:20:51.677309 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:51.677483 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:51.677891 17 trace.go:205] Trace[978801428]: "Call conversion webhook" custom-resource-definition:apiserversources.sources.knative.dev,desired-api-version:sources.knative.dev/v1,object-count:1,UID:3dd0b9fb-3fc7-4ddb-afef-a6adf9136f27 (23-Feb-2021 20:20:51.593) (total time: 84ms):\nTrace[978801428]: ---"Request completed" 84ms (20:20:00.677)\nTrace[978801428]: [84.191791ms] [84.191791ms] END\nI0223 20:20:51.678347 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:53.483444 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:53.490707 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:53.508721 17 store.go:1376] Monitoring brokers.eventing.knative.dev count at //eventing.knative.dev/brokers\nI0223 20:20:53.513597 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:53.513650 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:53.531993 17 store.go:1376] Monitoring brokers.eventing.knative.dev count at //eventing.knative.dev/brokers\nI0223 20:20:53.540581 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:53.542713 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:54.921439 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:54.921484 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:54.940185 17 store.go:1376] Monitoring kafkasources.sources.knative.dev count at //sources.knative.dev/kafkasources\nI0223 20:20:54.944007 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:54.944065 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:54.945537 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:54.955945 17 store.go:1376] Monitoring kafkasources.sources.knative.dev count at //sources.knative.dev/kafkasources\nI0223 20:20:54.961801 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:55.008962 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:55.009015 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:55.023853 17 store.go:1376] Monitoring channels.messaging.knative.dev count at //messaging.knative.dev/channels\nI0223 20:20:55.026196 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:55.026236 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:55.043368 17 store.go:1376] Monitoring channels.messaging.knative.dev count at //messaging.knative.dev/channels\nI0223 20:20:55.051526 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:55.060572 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:55.719245 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:55.719300 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:55.733076 17 store.go:1376] Monitoring kafkachannels.messaging.knative.dev count at //messaging.knative.dev/kafkachannels\nI0223 20:20:55.734835 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:55.734881 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:55.741589 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:55.747813 17 store.go:1376] Monitoring kafkachannels.messaging.knative.dev count at //messaging.knative.dev/kafkachannels\nI0223 20:20:55.751478 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:20:56.118157 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:20:56.118215 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:20:56.128804 17 store.go:1376] Monitoring kameletbindings.camel.apache.org count at //camel.apache.org/kameletbindings\nI0223 20:20:56.139418 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:21:02.402121 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:21:02.402175 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:21:02.402190 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:21:02.402476 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028286450, {CONNECTING }\nI0223 20:21:02.414243 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028286450, {READY }\nI0223 20:21:02.415843 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:21:02.973381 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:21:02.973432 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:21:02.991475 17 store.go:1376] Monitoring pingsources.sources.knative.dev count at //sources.knative.dev/pingsources\nI0223 20:21:03.003073 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:21:03.003118 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:21:03.018175 17 store.go:1376] Monitoring pingsources.sources.knative.dev count at //sources.knative.dev/pingsources\nI0223 20:21:03.035620 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:21:03.050309 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:21:03.807464 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:21:03.807513 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:21:03.807530 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:21:03.808520 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02436c8b0, {CONNECTING }\nI0223 20:21:03.819977 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02436c8b0, {READY }\nI0223 20:21:03.821475 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:21:10.141514 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:21:10.141570 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:21:10.141587 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:21:10.141706 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0166cbe30, {CONNECTING }\nI0223 20:21:10.151655 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0166cbe30, {READY }\nI0223 20:21:10.152633 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:21:10.939849 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:21:10.939894 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:21:10.955214 17 store.go:1376] Monitoring integrations.camel.apache.org count at //camel.apache.org/integrations\nI0223 20:21:10.961059 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:21:25.056781 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:21:25.056828 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:21:25.056840 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:21:25.057019 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c79c300, {CONNECTING }\nI0223 20:21:25.077718 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c79c300, {READY }\nI0223 20:21:25.079513 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:21:37.374492 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:21:37.374547 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:21:37.374564 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:21:37.374714 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021770900, {CONNECTING }\nI0223 20:21:37.389460 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021770900, {READY }\nI0223 20:21:37.391193 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:21:42.784500 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:21:42.784543 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:21:42.784553 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:21:42.784643 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0223e4580, {CONNECTING }\nI0223 20:21:42.795068 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0223e4580, {READY }\nI0223 20:21:42.796015 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:21:50.187564 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:21:50.187627 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:21:50.187645 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:21:50.187740 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d004990, {CONNECTING }\nI0223 20:21:50.202185 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d004990, {READY }\nI0223 20:21:50.203094 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:21:54.686230 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:21:54.686305 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:21:54.703746 17 store.go:1376] Monitoring kamelets.camel.apache.org count at //camel.apache.org/kamelets\nI0223 20:21:54.708111 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:21:57.907930 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:21:57.908028 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:21:57.908045 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:21:57.908361 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016ce1190, {CONNECTING }\nI0223 20:21:57.920946 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016ce1190, {READY }\nI0223 20:21:57.922239 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:22:07.377066 17 cacher.go:782] cacher (*core.ConfigMap): 3 objects queued in incoming channel.\nI0223 20:22:07.377094 17 cacher.go:782] cacher (*core.ConfigMap): 4 objects queued in incoming channel.\nI0223 20:22:20.649500 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:22:20.649579 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:22:20.649595 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:22:20.649997 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c4d1d40, {CONNECTING }\nI0223 20:22:20.667142 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c4d1d40, {READY }\nI0223 20:22:20.668648 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:22:27.222025 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:22:27.222068 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:22:27.222083 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:22:27.222386 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ff651a0, {CONNECTING }\nI0223 20:22:27.232819 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ff651a0, {READY }\nI0223 20:22:27.233794 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:22:28.961107 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:22:28.961150 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:22:28.961195 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:22:28.961284 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028287400, {CONNECTING }\nI0223 20:22:28.970899 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028287400, {READY }\nI0223 20:22:28.971814 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:22:33.158968 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:22:33.159006 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:22:33.159940 17 upgradeaware.go:387] Error proxying data from backend to client: tls: use of closed connection\nE0223 20:22:33.171092 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:22:33.171117 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:22:33.184522 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:22:33.184548 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:22:33.211161 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:22:33.211189 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:22:39.034968 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:22:39.035031 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:22:39.035054 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:22:39.035371 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b810c30, {CONNECTING }\nI0223 20:22:39.048759 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b810c30, {READY }\nI0223 20:22:39.050360 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:22:56.559219 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:22:56.559301 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:22:56.559317 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:22:56.559594 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d4be450, {CONNECTING }\nI0223 20:22:56.572545 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d4be450, {READY }\nI0223 20:22:56.573996 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:23:00.650341 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:23:00.650397 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:23:00.650413 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:23:00.650656 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ff0c5f0, {CONNECTING }\nI0223 20:23:00.661757 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ff0c5f0, {READY }\nI0223 20:23:00.664431 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:23:01.450718 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:23:01.450773 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:23:01.450791 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:23:01.451160 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02cbd95f0, {CONNECTING }\nI0223 20:23:01.461109 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02cbd95f0, {READY }\nI0223 20:23:01.462401 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:23:11.415878 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:23:11.415928 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:23:11.415981 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:23:11.416118 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02315e9e0, {CONNECTING }\nI0223 20:23:11.430865 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02315e9e0, {READY }\nI0223 20:23:11.432292 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:23:35.139037 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:23:35.139093 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:23:35.139108 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:23:35.139451 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00815ff00, {CONNECTING }\nI0223 20:23:35.151568 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00815ff00, {READY }\nI0223 20:23:35.153076 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:23:41.818154 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:23:41.818199 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:23:41.818214 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:23:41.818653 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00f8b62a0, {CONNECTING }\nI0223 20:23:41.828464 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00f8b62a0, {READY }\nI0223 20:23:41.829539 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:23:42.115405 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:23:42.115459 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:23:42.115476 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:23:42.115896 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00fa5f6c0, {CONNECTING }\nI0223 20:23:42.132811 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00fa5f6c0, {READY }\nI0223 20:23:42.135036 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:23:50.199064 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:23:50.199120 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:23:50.199137 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:23:50.199266 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014183670, {CONNECTING }\nI0223 20:23:50.218182 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014183670, {READY }\nI0223 20:23:50.220051 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:24:13.153602 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:24:13.153658 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:24:13.153674 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:24:13.154010 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0286efba0, {CONNECTING }\nI0223 20:24:13.165387 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0286efba0, {READY }\nI0223 20:24:13.166606 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:24:14.116378 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:24:14.116423 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:24:14.116435 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:24:14.116534 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc026f54780, {CONNECTING }\nI0223 20:24:14.128847 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc026f54780, {READY }\nI0223 20:24:14.130388 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:24:22.310087 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:24:22.310317 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:24:22.310370 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:24:22.310469 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02783fa90, {CONNECTING }\nI0223 20:24:22.323418 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02783fa90, {READY }\nI0223 20:24:22.324796 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:24:25.349540 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:24:25.349602 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:24:25.349620 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:24:25.349797 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015f209d0, {CONNECTING }\nI0223 20:24:25.360371 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015f209d0, {READY }\nI0223 20:24:25.361219 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:24:33.125753 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:24:33.125793 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:24:33.142741 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:24:33.142777 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:24:33.161077 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:24:33.161118 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:24:33.179165 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:24:33.179206 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:24:46.789861 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:24:46.791139 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:24:46.791166 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:24:46.791698 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0204db760, {CONNECTING }\nI0223 20:24:46.802136 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0204db760, {READY }\nI0223 20:24:46.803194 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:24:47.908668 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:24:47.908751 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:24:47.908763 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:24:47.908870 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021665420, {CONNECTING }\nI0223 20:24:47.923052 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021665420, {READY }\nI0223 20:24:47.925283 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:25:02.883303 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:25:02.883372 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:25:02.883389 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:25:02.883644 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d68f6c0, {CONNECTING }\nI0223 20:25:02.897543 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d68f6c0, {READY }\nI0223 20:25:02.898776 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:25:04.267407 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:25:04.267466 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:25:04.267482 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:25:04.267800 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ec56230, {CONNECTING }\nI0223 20:25:04.279680 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ec56230, {READY }\nI0223 20:25:04.281191 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:25:20.519542 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:25:20.519592 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:25:20.519611 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:25:20.519808 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02edfbaf0, {CONNECTING }\nI0223 20:25:20.530307 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02edfbaf0, {READY }\nI0223 20:25:20.534521 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:25:30.106490 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:25:30.106534 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:25:30.106548 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:25:30.106647 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014a97500, {CONNECTING }\nI0223 20:25:30.120784 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014a97500, {READY }\nI0223 20:25:30.122103 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:25:33.132771 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:25:33.132805 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:25:33.149034 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:25:33.149068 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:25:33.175529 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:25:33.175558 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:25:33.184438 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:25:33.184472 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:25:38.887365 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:25:38.887418 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:25:38.887435 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:25:38.888044 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016778ce0, {CONNECTING }\nI0223 20:25:38.905180 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016778ce0, {READY }\nI0223 20:25:38.907366 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:25:43.149332 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:25:43.149427 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:25:43.149444 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:25:43.149709 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02a315240, {CONNECTING }\nI0223 20:25:43.161854 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02a315240, {READY }\nI0223 20:25:43.163565 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:26:00.508499 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:26:00.508651 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:26:00.508700 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:26:00.508956 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01566a4a0, {CONNECTING }\nI0223 20:26:00.520985 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01566a4a0, {READY }\nI0223 20:26:00.526054 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:26:03.876104 17 cacher.go:782] cacher (*rbac.ClusterRole): 1 objects queued in incoming channel.\nI0223 20:26:03.876134 17 cacher.go:782] cacher (*rbac.ClusterRole): 2 objects queued in incoming channel.\nI0223 20:26:04.808576 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:26:04.808666 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:26:04.808684 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:26:04.808955 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc008f43940, {CONNECTING }\nI0223 20:26:04.831198 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc008f43940, {READY }\nI0223 20:26:04.838327 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:26:20.030155 17 trace.go:205] Trace[1734552667]: "List" url:/apis/console.openshift.io/v1/consolequickstarts,user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74,client:::1 (23-Feb-2021 20:26:18.618) (total time: 1411ms):\nTrace[1734552667]: ---"Writing http response done" count:11 1400ms (20:26:00.030)\nTrace[1734552667]: [1.411391929s] [1.411391929s] END\nI0223 20:26:22.371479 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:26:22.371541 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:26:22.371558 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:26:22.371853 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015c95f80, {CONNECTING }\nI0223 20:26:22.387508 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015c95f80, {READY }\nI0223 20:26:22.389024 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:26:23.173172 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:26:23.173266 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:26:23.173294 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:26:23.175057 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01fb49e20, {CONNECTING }\nI0223 20:26:23.188128 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01fb49e20, {READY }\nI0223 20:26:23.189477 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:26:29.232457 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:26:29.232574 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:26:29.234116 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:26:36.162998 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:26:36.163054 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:26:36.163069 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:26:36.163299 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01dc0c760, {CONNECTING }\nI0223 20:26:36.172816 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01dc0c760, {READY }\nI0223 20:26:36.174330 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:26:38.033962 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:26:38.034007 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:26:38.034020 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:26:38.034107 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0248ac080, {CONNECTING }\nI0223 20:26:38.045685 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0248ac080, {READY }\nI0223 20:26:38.047127 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:26:54.983645 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:26:54.983692 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:26:54.983708 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:26:54.983903 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc024167100, {CONNECTING }\nI0223 20:26:54.997478 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc024167100, {READY }\nI0223 20:26:55.001178 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:27:01.149230 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:27:01.149296 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:27:01.149315 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:27:01.149480 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b1e4c10, {CONNECTING }\nI0223 20:27:01.162123 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b1e4c10, {READY }\nI0223 20:27:01.163383 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:27:11.730688 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:27:11.730735 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:27:11.730751 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:27:11.730913 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ceeb7e0, {CONNECTING }\nI0223 20:27:11.740267 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ceeb7e0, {READY }\nI0223 20:27:11.741361 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:27:18.787381 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:27:18.787445 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:27:18.787461 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:27:18.787637 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028b243a0, {CONNECTING }\nI0223 20:27:18.799054 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028b243a0, {READY }\nI0223 20:27:18.800474 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:27:27.215831 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:27:27.216131 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:27:27.216277 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:27:27.216424 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029734d30, {CONNECTING }\nI0223 20:27:27.228065 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029734d30, {READY }\nI0223 20:27:27.229564 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:27:33.149055 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:27:33.149090 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:27:33.164164 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:27:33.164196 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:27:33.185302 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:27:33.185342 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:27:33.187481 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:27:33.187520 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:27:34.373010 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:27:34.373056 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:27:34.373069 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:27:34.373158 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01546e580, {CONNECTING }\nI0223 20:27:34.383103 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01546e580, {READY }\nI0223 20:27:34.384601 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:27:51.269795 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:27:51.269853 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:27:51.290269 17 store.go:1376] Monitoring clusteroperators.config.openshift.io count at //config.openshift.io/clusteroperators\nI0223 20:27:51.317241 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nE0223 20:27:51.731119 17 customresource_handler.go:669] error building openapi models for subscriptions.operators.coreos.com: ERROR $root.definitions.com.coreos.operators.v1alpha1.Subscription.properties.spec.properties.config.properties.env.items..properties.valueFrom.properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.Subscription.properties.spec.properties.config.properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.Subscription.properties.spec.properties.config.properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.Subscription.properties.spec.properties.config.properties.volumes.items..properties.downwardAPI.properties.items.items..properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.Subscription.properties.spec.properties.config.properties.volumes.items..properties.emptyDir.properties.sizeLimit has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.Subscription.properties.spec.properties.config.properties.volumes.items..properties.ephemeral.properties.volumeClaimTemplate.properties.spec.properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.Subscription.properties.spec.properties.config.properties.volumes.items..properties.ephemeral.properties.volumeClaimTemplate.properties.spec.properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.Subscription.properties.spec.properties.config.properties.volumes.items..properties.projected.properties.sources.items..properties.downwardAPI.properties.items.items..properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nI0223 20:27:51.732839 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:27:51.732880 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:27:51.746528 17 store.go:1376] Monitoring subscriptions.operators.coreos.com count at //operators.coreos.com/subscriptions\nI0223 20:27:51.759964 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:27:52.352849 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:27:52.352895 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:27:52.352947 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:27:52.353183 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc04f7973f0, {CONNECTING }\nI0223 20:27:52.362900 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc04f7973f0, {READY }\nI0223 20:27:52.363826 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:27:54.410402 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:27:54.410455 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:27:54.424487 17 store.go:1376] Monitoring cephclusters.ceph.rook.io count at //ceph.rook.io/cephclusters\nI0223 20:27:54.430429 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:27:54.594769 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:27:54.594812 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:27:54.594823 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:27:54.595131 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01dd58c10, {CONNECTING }\nI0223 20:27:54.607846 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01dd58c10, {READY }\nI0223 20:27:54.609129 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:28:09.698538 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:28:09.698584 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:28:09.698602 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:28:09.698702 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c32a090, {CONNECTING }\nI0223 20:28:09.713272 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c32a090, {READY }\nI0223 20:28:09.717556 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:28:09.887909 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:28:09.888002 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:28:09.888021 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:28:09.888356 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc017baf290, {CONNECTING }\nI0223 20:28:09.901690 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc017baf290, {READY }\nI0223 20:28:09.902723 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:28:25.678494 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:28:25.678557 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:28:25.678574 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:28:25.678944 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02bed5d40, {CONNECTING }\nI0223 20:28:25.691030 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02bed5d40, {READY }\nI0223 20:28:25.692939 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:28:26.716151 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:28:26.716204 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:28:26.716219 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:28:26.716383 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ac6e230, {CONNECTING }\nI0223 20:28:26.726957 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ac6e230, {READY }\nI0223 20:28:26.728132 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:28:39.349768 17 cacher.go:782] cacher (*core.ConfigMap): 5 objects queued in incoming channel.\nI0223 20:28:39.349817 17 cacher.go:782] cacher (*core.ConfigMap): 6 objects queued in incoming channel.\nI0223 20:28:47.521360 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:28:47.521403 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:28:47.521413 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:28:47.521505 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0203331a0, {CONNECTING }\nI0223 20:28:47.533134 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0203331a0, {READY }\nI0223 20:28:47.534543 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:28:51.498224 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:28:51.498278 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:28:51.498290 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:28:51.498560 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028b78120, {CONNECTING }\nI0223 20:28:51.509904 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028b78120, {READY }\nI0223 20:28:51.510904 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:28:55.785149 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:28:55.785201 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:28:55.785260 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:28:55.785505 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029502800, {CONNECTING }\nI0223 20:28:55.804173 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029502800, {READY }\nI0223 20:28:55.815170 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:29:11.303867 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:29:11.303951 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:29:11.303970 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:29:11.304278 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00d821460, {CONNECTING }\nI0223 20:29:11.314431 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00d821460, {READY }\nI0223 20:29:11.315648 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:29:24.591952 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:29:24.592044 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:29:24.592062 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:29:24.592175 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0148458d0, {CONNECTING }\nI0223 20:29:24.594333 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:29:24.594372 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:29:24.594386 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:29:24.594658 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00aa49f40, {CONNECTING }\nI0223 20:29:24.605278 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0148458d0, {READY }\nI0223 20:29:24.606123 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00aa49f40, {READY }\nI0223 20:29:24.606915 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:29:24.608796 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:29:27.599132 17 trace.go:205] Trace[1008713815]: "List" url:/apis/console.openshift.io/v1/consolequickstarts,user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74,client:::1 (23-Feb-2021 20:29:26.169) (total time: 1429ms):\nTrace[1008713815]: ---"Writing http response done" count:11 1420ms (20:29:00.599)\nTrace[1008713815]: [1.429871792s] [1.429871792s] END\nI0223 20:29:32.796184 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:29:32.796246 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:29:32.796262 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:29:32.796695 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc020431df0, {CONNECTING }\nI0223 20:29:32.809285 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc020431df0, {READY }\nI0223 20:29:32.810849 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:29:33.110565 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:29:33.110597 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:29:33.124406 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:29:33.124433 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:29:33.149485 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:29:33.149519 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:29:33.163873 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:29:33.163898 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:29:42.097462 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:29:42.097508 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:29:42.097518 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:29:42.097603 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02990a1e0, {CONNECTING }\nI0223 20:29:42.108625 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02990a1e0, {READY }\nI0223 20:29:42.110579 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:29:59.878722 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:29:59.878773 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:29:59.878789 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:29:59.878941 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0159bc970, {CONNECTING }\nI0223 20:29:59.896215 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0159bc970, {READY }\nI0223 20:29:59.897825 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:30:00.499168 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:30:00.499308 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:30:00.500625 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:30:03.695204 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:30:03.695273 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:30:03.695292 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:30:03.695508 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00e3907a0, {CONNECTING }\nI0223 20:30:03.705858 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00e3907a0, {READY }\nI0223 20:30:03.707006 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:30:08.182342 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:30:08.182461 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:30:08.183727 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:30:09.485060 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:30:09.485123 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:30:09.485140 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:30:09.485461 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00eadba20, {CONNECTING }\nI0223 20:30:09.498631 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00eadba20, {READY }\nI0223 20:30:09.500144 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:30:13.698830 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:30:13.698873 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:30:13.698887 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:30:13.699067 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc070472340, {CONNECTING }\nI0223 20:30:13.709140 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc070472340, {READY }\nI0223 20:30:13.709979 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:30:33.116212 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:30:33.116238 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:30:33.130066 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:30:33.130092 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:30:33.164513 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:30:33.164600 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:30:33.168839 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:30:33.168862 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:30:39.315438 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:30:39.315483 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:30:39.315500 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:30:39.315828 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ff65f80, {CONNECTING }\nI0223 20:30:39.326739 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ff65f80, {READY }\nI0223 20:30:39.328077 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:30:40.870348 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:30:40.870634 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:30:40.870760 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:30:40.871310 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc022511af0, {CONNECTING }\nI0223 20:30:40.881485 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc022511af0, {READY }\nI0223 20:30:40.882398 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:30:43.934465 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:30:43.934540 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:30:43.934559 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:30:43.934974 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ab3d8e0, {CONNECTING }\nI0223 20:30:43.951558 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ab3d8e0, {READY }\nI0223 20:30:43.954795 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:30:58.564777 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:30:58.564829 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:30:58.564846 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:30:58.565023 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02016dc00, {CONNECTING }\nI0223 20:30:58.574400 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02016dc00, {READY }\nI0223 20:30:58.575605 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:31:15.683374 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:31:15.683421 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:31:15.683434 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:31:15.683693 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0342705f0, {CONNECTING }\nI0223 20:31:15.701114 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0342705f0, {READY }\nI0223 20:31:15.702738 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:31:15.790280 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:31:15.790329 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:31:15.790345 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:31:15.790461 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03430bed0, {CONNECTING }\nI0223 20:31:15.803429 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03430bed0, {READY }\nI0223 20:31:15.804516 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:31:17.699809 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:31:17.699859 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:31:17.699876 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:31:17.700157 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0348abd10, {CONNECTING }\nI0223 20:31:17.712189 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0348abd10, {READY }\nI0223 20:31:17.714102 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:31:30.954831 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:31:30.954887 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:31:30.954903 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:31:30.955382 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028f35830, {CONNECTING }\nI0223 20:31:30.964863 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028f35830, {READY }\nI0223 20:31:30.966132 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:31:46.113310 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:31:46.113373 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:31:46.113393 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:31:46.113498 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01431d0c0, {CONNECTING }\nI0223 20:31:46.123701 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01431d0c0, {READY }\nI0223 20:31:46.124654 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:31:49.515151 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:31:49.515196 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:31:49.515207 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:31:49.515379 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00878b510, {CONNECTING }\nI0223 20:31:49.526811 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00878b510, {READY }\nI0223 20:31:49.528450 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:31:55.142822 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:31:55.142876 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:31:55.142888 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:31:55.143138 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00ef91d30, {CONNECTING }\nI0223 20:31:55.153807 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00ef91d30, {READY }\nI0223 20:31:55.155083 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:32:11.174813 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:32:11.174870 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:32:11.174883 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:32:11.174975 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028011ce0, {CONNECTING }\nI0223 20:32:11.186267 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028011ce0, {READY }\nI0223 20:32:11.188099 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:32:20.460016 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:32:20.460085 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:32:20.460101 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:32:20.460542 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02bbeb5e0, {CONNECTING }\nI0223 20:32:20.473711 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02bbeb5e0, {READY }\nI0223 20:32:20.474903 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:32:29.318034 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:32:29.318114 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:32:29.318131 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:32:29.318427 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02e3478b0, {CONNECTING }\nI0223 20:32:29.335165 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02e3478b0, {READY }\nI0223 20:32:29.338599 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:32:32.377525 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:32:32.377586 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:32:32.377601 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:32:32.377895 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0226fc8c0, {CONNECTING }\nI0223 20:32:32.389973 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0226fc8c0, {READY }\nI0223 20:32:32.391498 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:32:33.122230 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:32:33.122259 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:32:33.131639 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:32:33.131670 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:32:33.174547 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:32:33.174580 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:32:33.181051 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:32:33.181078 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:32:43.788567 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:32:43.788622 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:32:43.788638 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:32:43.788707 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03524e960, {CONNECTING }\nI0223 20:32:43.798514 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03524e960, {READY }\nI0223 20:32:43.800147 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:32:51.844091 17 wrap.go:54] timeout or abort while handling: POST "/api/v1/namespaces/josh/events"\nE0223 20:32:56.393541 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 20:32:56.393597 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:32:56.394995 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:32:56.395932 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:32:59.401816 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:32:59.402045 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:32:59.402075 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:32:59.402402 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029d8a790, {CONNECTING }\nI0223 20:32:59.411491 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029d8a790, {READY }\nI0223 20:32:59.412307 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:33:12.318610 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:33:12.318735 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:33:12.320064 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:33:12.511510 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:33:12.511596 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:33:12.511615 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:33:12.511719 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0301dbb70, {CONNECTING }\nI0223 20:33:12.524688 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0301dbb70, {READY }\nI0223 20:33:12.525962 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:33:14.240202 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:33:14.240260 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:33:14.240276 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:33:14.240454 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015097060, {CONNECTING }\nI0223 20:33:14.251752 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015097060, {READY }\nI0223 20:33:14.253166 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:33:27.980693 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:33:27.980800 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:33:27.980819 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:33:27.980954 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00c1b1140, {CONNECTING }\nI0223 20:33:27.992291 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00c1b1140, {READY }\nI0223 20:33:27.993446 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:33:35.604958 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:33:35.605092 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:33:35.605119 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:33:35.605487 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014d2c2c0, {CONNECTING }\nI0223 20:33:35.615541 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014d2c2c0, {READY }\nI0223 20:33:35.616784 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:33:43.197235 17 customresource_handler.go:669] error building openapi models for managedclusters.cluster.open-cluster-management.io: ERROR $root.definitions.io.open-cluster-management.cluster.v1.ManagedCluster.properties.status.properties.allocatable.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.io.open-cluster-management.cluster.v1.ManagedCluster.properties.status.properties.capacity.additionalProperties.schema has invalid property: anyOf\nI0223 20:33:43.198338 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:33:43.198387 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:33:43.210941 17 store.go:1376] Monitoring managedclusters.cluster.open-cluster-management.io count at //cluster.open-cluster-management.io/managedclusters\nI0223 20:33:43.216360 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:33:52.284326 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:33:52.284372 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:33:52.284383 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:33:52.284649 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc041522530, {CONNECTING }\nI0223 20:33:52.297993 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc041522530, {READY }\nI0223 20:33:52.299516 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:33:52.449009 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:33:52.449054 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:33:52.449069 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:33:52.449349 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc041523590, {CONNECTING }\nI0223 20:33:52.461268 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc041523590, {READY }\nI0223 20:33:52.462667 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:34:04.732502 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:34:04.732546 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:34:04.732558 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:34:04.732651 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c9bf3c0, {CONNECTING }\nI0223 20:34:04.742693 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c9bf3c0, {READY }\nI0223 20:34:04.743717 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:34:15.007787 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:34:15.007845 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:34:15.007862 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:34:15.008189 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02951e940, {CONNECTING }\nI0223 20:34:15.018674 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02951e940, {READY }\nI0223 20:34:15.020524 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:34:31.095216 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:34:31.095273 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:34:31.095293 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:34:31.095636 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc005effc40, {CONNECTING }\nI0223 20:34:31.108698 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc005effc40, {READY }\nI0223 20:34:31.110358 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:34:33.114772 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:34:33.114803 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:34:33.127888 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:34:33.128040 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:34:33.175506 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:34:33.175601 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:34:33.190854 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:34:33.190888 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:34:36.795887 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:34:36.795971 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:34:36.795989 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:34:36.796185 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03240a340, {CONNECTING }\nI0223 20:34:36.811362 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03240a340, {READY }\nI0223 20:34:36.812808 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:34:42.535539 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:34:42.535605 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:34:42.535622 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:34:42.536072 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0342b7f30, {CONNECTING }\nI0223 20:34:42.545279 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0342b7f30, {READY }\nI0223 20:34:42.546631 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:34:53.022629 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:34:53.022690 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:34:53.022707 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:34:53.022849 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b6b33c0, {CONNECTING }\nI0223 20:34:53.033329 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b6b33c0, {READY }\nI0223 20:34:53.034573 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:35:15.411169 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:35:15.411217 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:35:15.411267 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:35:15.411603 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00f822c70, {CONNECTING }\nI0223 20:35:15.422756 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00f822c70, {READY }\nI0223 20:35:15.424150 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:35:19.256652 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:35:19.256698 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:35:19.256715 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:35:19.257079 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00eada6c0, {CONNECTING }\nI0223 20:35:19.270274 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00eada6c0, {READY }\nI0223 20:35:19.274041 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:35:19.641453 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:35:19.641556 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:35:19.642624 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:35:20.676802 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:35:20.676867 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:35:20.676885 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:35:20.677094 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc011363450, {CONNECTING }\nI0223 20:35:20.690081 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc011363450, {READY }\nI0223 20:35:20.691252 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:35:27.737182 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:35:27.737252 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:35:27.737301 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:35:27.737550 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc012907da0, {CONNECTING }\nI0223 20:35:27.751153 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc012907da0, {READY }\nI0223 20:35:27.752100 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:35:33.148549 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:35:33.148575 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:35:33.167110 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:35:33.167141 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:35:33.182775 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:35:33.182826 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:35:33.200548 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:35:33.200580 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:35:48.604525 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:35:48.604757 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:35:48.604784 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:35:48.604874 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc022ad2150, {CONNECTING }\nI0223 20:35:48.617491 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc022ad2150, {READY }\nI0223 20:35:48.618857 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:36:01.610125 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:36:01.610198 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:36:01.610213 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:36:01.610327 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0277a01f0, {CONNECTING }\nI0223 20:36:01.631364 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0277a01f0, {READY }\nI0223 20:36:01.633277 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:36:04.511764 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:36:04.511900 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:36:04.512011 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:36:04.513403 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc024bbb930, {CONNECTING }\nI0223 20:36:04.533150 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc024bbb930, {READY }\nI0223 20:36:04.539156 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:36:04.774183 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:36:04.774253 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:36:04.774272 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:36:04.774622 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01591b110, {CONNECTING }\nI0223 20:36:04.798386 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01591b110, {READY }\nI0223 20:36:04.802749 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:36:26.964504 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:36:26.964559 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:36:26.964576 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:36:26.964765 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0295b6530, {CONNECTING }\nI0223 20:36:26.977167 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0295b6530, {READY }\nI0223 20:36:26.978704 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:36:43.085414 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:36:43.085470 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:36:43.085486 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:36:43.085744 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00805e030, {CONNECTING }\nI0223 20:36:43.098298 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00805e030, {READY }\nI0223 20:36:43.100608 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:36:46.295646 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:36:46.295693 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:36:46.295706 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:36:46.295964 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0118ec3c0, {CONNECTING }\nI0223 20:36:46.306106 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0118ec3c0, {READY }\nI0223 20:36:46.307185 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:36:46.891564 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:36:46.891607 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:36:46.891622 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:36:46.891707 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00e7ed9f0, {CONNECTING }\nI0223 20:36:46.901745 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00e7ed9f0, {READY }\nI0223 20:36:46.902793 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:37:11.684112 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:37:11.684156 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:37:11.684167 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:37:11.684455 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01dc0d1c0, {CONNECTING }\nI0223 20:37:11.700827 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01dc0d1c0, {READY }\nI0223 20:37:11.702461 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:37:16.402018 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:37:16.402070 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:37:16.402085 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:37:16.402461 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01fea52a0, {CONNECTING }\nI0223 20:37:16.417051 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01fea52a0, {READY }\nI0223 20:37:16.418428 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:37:18.228561 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:37:18.228660 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:37:18.228680 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:37:18.228872 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021f12d60, {CONNECTING }\nI0223 20:37:18.242216 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021f12d60, {READY }\nI0223 20:37:18.243631 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:37:24.810677 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:37:24.810743 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:37:24.810762 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:37:24.811360 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc025982dd0, {CONNECTING }\nI0223 20:37:24.826368 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc025982dd0, {READY }\nI0223 20:37:24.827433 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:37:33.164906 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:37:33.164938 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:37:33.180808 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:37:33.180840 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:37:33.193130 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:37:33.193160 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:37:33.210229 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:37:33.210258 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:37:52.783559 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:37:52.783709 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:37:52.783763 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:37:52.784150 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c0154b0, {CONNECTING }\nI0223 20:37:52.798093 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c0154b0, {READY }\nI0223 20:37:52.799525 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:38:01.105040 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:38:01.105086 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:38:01.105102 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:38:01.105421 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02cf1d410, {CONNECTING }\nI0223 20:38:01.118207 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02cf1d410, {READY }\nI0223 20:38:01.119725 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:38:01.276437 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:38:01.276492 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:38:01.276509 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:38:01.276803 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02a611d70, {CONNECTING }\nI0223 20:38:01.287164 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02a611d70, {READY }\nI0223 20:38:01.288344 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:38:07.978762 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:38:07.978810 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:38:07.978827 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:38:07.978925 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0358f3cd0, {CONNECTING }\nI0223 20:38:07.994632 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0358f3cd0, {READY }\nI0223 20:38:07.996418 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:38:35.139489 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:38:35.139549 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:38:35.139564 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:38:35.139859 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ca906d0, {CONNECTING }\nI0223 20:38:35.153277 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ca906d0, {READY }\nI0223 20:38:35.154773 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:38:36.212545 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:38:36.212621 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:38:36.212636 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:38:36.212866 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016c7e660, {CONNECTING }\nI0223 20:38:36.226332 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016c7e660, {READY }\nI0223 20:38:36.228032 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:38:37.136416 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:38:37.136466 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:38:37.136484 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:38:37.136575 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01cc9baa0, {CONNECTING }\nI0223 20:38:37.150517 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01cc9baa0, {READY }\nI0223 20:38:37.151430 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:38:47.632916 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:38:47.632965 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:38:47.633015 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:38:47.633093 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00aa491a0, {CONNECTING }\nI0223 20:38:47.644097 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00aa491a0, {READY }\nI0223 20:38:47.645186 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:38:51.545231 17 trace.go:205] Trace[1184859375]: "List" url:/apis/console.openshift.io/v1/consolequickstarts,user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74,client:::1 (23-Feb-2021 20:38:50.117) (total time: 1427ms):\nTrace[1184859375]: ---"Writing http response done" count:11 1416ms (20:38:00.545)\nTrace[1184859375]: [1.427442228s] [1.427442228s] END\nI0223 20:39:09.342678 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:09.342725 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:39:09.342741 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:09.342948 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b047080, {CONNECTING }\nI0223 20:39:09.355135 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b047080, {READY }\nI0223 20:39:09.356758 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:39:09.905720 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:09.905783 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:39:09.905801 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:09.905898 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01d3d8c00, {CONNECTING }\nI0223 20:39:09.921266 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01d3d8c00, {READY }\nI0223 20:39:09.924744 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:39:17.533766 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:17.533829 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:39:17.533848 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:17.534106 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0126046c0, {CONNECTING }\nI0223 20:39:17.543548 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0126046c0, {READY }\nI0223 20:39:17.544838 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:39:18.558397 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:18.558470 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:39:18.558488 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:18.558854 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc020159ca0, {CONNECTING }\nI0223 20:39:18.570488 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc020159ca0, {READY }\nI0223 20:39:18.571686 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:39:33.145599 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:39:33.145632 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:39:33.178176 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:39:33.178219 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:39:33.196678 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:39:33.196719 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:39:33.215606 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:39:33.215640 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:39:33.815455 17 cacher.go:782] cacher (*core.Pod): 1 objects queued in incoming channel.\nI0223 20:39:33.815486 17 cacher.go:782] cacher (*core.Pod): 2 objects queued in incoming channel.\nE0223 20:39:50.321232 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:39:50.321441 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:39:50.322557 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:39:52.263464 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:52.263552 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:39:52.263567 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:52.263655 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c6afc90, {CONNECTING }\nI0223 20:39:52.274876 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c6afc90, {READY }\nI0223 20:39:52.275771 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:39:52.578122 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:52.578176 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:39:52.578193 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:52.578497 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02cf76750, {CONNECTING }\nI0223 20:39:52.591004 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02cf76750, {READY }\nI0223 20:39:52.592632 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:39:54.756286 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:54.756333 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:39:54.756344 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:54.756414 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023625960, {CONNECTING }\nI0223 20:39:54.767808 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023625960, {READY }\nI0223 20:39:54.769129 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:39:56.404294 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:56.404345 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:39:56.404361 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:56.404481 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021f4dcb0, {CONNECTING }\nI0223 20:39:56.415138 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021f4dcb0, {READY }\nI0223 20:39:56.416213 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:40:02.220022 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:40:02.220127 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:40:02.221866 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:40:25.339731 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:40:25.339789 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:40:25.339807 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:40:25.340129 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015a709b0, {CONNECTING }\nI0223 20:40:25.353181 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015a709b0, {READY }\nI0223 20:40:25.354655 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:40:30.462091 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:40:30.462135 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:40:30.462146 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:40:30.462230 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016332960, {CONNECTING }\nI0223 20:40:30.472773 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016332960, {READY }\nI0223 20:40:30.474206 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:40:31.243026 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:40:31.243150 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:40:31.244166 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nE0223 20:40:33.150787 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:40:33.150819 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:40:33.190190 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:40:33.190224 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:40:33.201566 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:40:33.201592 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:40:33.221136 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:40:33.221163 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:40:36.603974 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:40:36.604027 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:40:36.604042 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:40:36.604223 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02aa90b70, {CONNECTING }\nI0223 20:40:36.613458 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02aa90b70, {READY }\nI0223 20:40:36.614529 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:40:37.663227 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:40:37.663281 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:40:37.663296 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:40:37.663389 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015fa35a0, {CONNECTING }\nI0223 20:40:37.676172 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015fa35a0, {READY }\nI0223 20:40:37.677917 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:40:40.123848 17 writers.go:64] error encountered while streaming results via websocket: context canceled\nI0223 20:40:40.123959 17 trace.go:205] Trace[1418061176]: "Get" url:/api/v1/namespaces/openshift-kube-apiserver/pods/kube-apiserver-ip-10-0-171-12.ec2.internal/log,user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36,client:76.182.85.204 (23-Feb-2021 20:13:49.846) (total time: 1610277ms):\nTrace[1418061176]: ---"Transformed response object" 1610268ms (20:40:00.123)\nTrace[1418061176]: [26m50.277491693s] [26m50.277491693s] END\nI0223 20:40:55.480563 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:40:55.480609 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:40:55.480622 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:40:55.480776 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034f5a9d0, {CONNECTING }\nI0223 20:40:55.492561 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034f5a9d0, {READY }\nI0223 20:40:55.493957 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:41:07.669817 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:41:07.669882 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:41:07.669898 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:41:07.670253 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fd968b0, {CONNECTING }\nI0223 20:41:07.687811 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fd968b0, {READY }\nI0223 20:41:07.692029 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:41:14.204908 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:41:14.204998 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:41:14.205013 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:41:14.205192 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b4fefa0, {CONNECTING }\nI0223 20:41:14.214551 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b4fefa0, {READY }\nI0223 20:41:14.219433 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:41:21.103101 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:41:21.103159 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:41:21.103176 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:41:21.103427 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0119dab10, {CONNECTING }\nI0223 20:41:21.123764 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0119dab10, {READY }\nI0223 20:41:21.132458 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:41:36.434348 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:41:36.434402 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:41:36.434421 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:41:36.434677 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc025e46df0, {CONNECTING }\nI0223 20:41:36.447480 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc025e46df0, {READY }\nI0223 20:41:36.449131 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:41:38.045560 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:41:38.045610 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:41:38.045622 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:41:38.045723 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0203be440, {CONNECTING }\nI0223 20:41:38.057884 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0203be440, {READY }\nI0223 20:41:38.060952 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:41:55.826056 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:41:55.826113 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:41:55.826130 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:41:55.826302 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b40be90, {CONNECTING }\nI0223 20:41:55.838968 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b40be90, {READY }\nI0223 20:41:55.840158 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:41:59.101506 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:41:59.101559 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:41:59.101576 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:41:59.101787 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02bed5930, {CONNECTING }\nI0223 20:41:59.110194 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02bed5930, {READY }\nI0223 20:41:59.111025 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:42:12.925131 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:42:12.925184 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:42:12.925233 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:42:12.925495 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02891ec50, {CONNECTING }\nI0223 20:42:12.934860 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02891ec50, {READY }\nI0223 20:42:12.935993 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:42:17.688496 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:42:17.688557 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:42:17.688569 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:42:17.688754 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00b2c8ca0, {CONNECTING }\nI0223 20:42:17.700814 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00b2c8ca0, {READY }\nI0223 20:42:17.702548 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:42:31.560490 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:42:31.560536 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:42:31.560547 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:42:31.560857 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01021ed60, {CONNECTING }\nI0223 20:42:31.577739 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01021ed60, {READY }\nI0223 20:42:31.579136 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:42:33.165446 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:42:33.165473 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:42:33.199165 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:42:33.199192 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:42:33.203090 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:42:33.203120 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:42:33.223717 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:42:33.223742 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:42:38.158825 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:42:38.158867 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:42:38.158879 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:42:38.159256 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc020087260, {CONNECTING }\nI0223 20:42:38.167802 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc020087260, {READY }\nI0223 20:42:38.168724 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:42:55.128431 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:42:55.128517 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:42:55.128536 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:42:55.128902 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ba88b50, {CONNECTING }\nI0223 20:42:55.137442 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ba88b50, {READY }\nI0223 20:42:55.138224 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:42:55.610417 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:42:55.610501 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:42:55.610521 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:42:55.610707 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f514340, {CONNECTING }\nI0223 20:42:55.623176 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f514340, {READY }\nI0223 20:42:55.624763 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:43:10.991584 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:43:10.991632 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:43:10.991648 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:43:10.992105 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e8414f0, {CONNECTING }\nI0223 20:43:11.002497 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e8414f0, {READY }\nI0223 20:43:11.003426 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:43:12.027793 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:43:12.027887 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:43:12.027905 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:43:12.028046 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c706ec0, {CONNECTING }\nI0223 20:43:12.041994 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c706ec0, {READY }\nI0223 20:43:12.043524 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:43:29.030181 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:43:29.030236 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:43:29.030251 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:43:29.030343 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023b61d70, {CONNECTING }\nI0223 20:43:29.042043 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023b61d70, {READY }\nI0223 20:43:29.043133 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:43:35.910273 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:43:35.910331 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:43:35.910348 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:43:35.910669 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02a874130, {CONNECTING }\nI0223 20:43:35.924414 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02a874130, {READY }\nI0223 20:43:35.926071 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:43:43.561251 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:43:43.561307 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:43:43.561323 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:43:43.561560 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc041ab4a20, {CONNECTING }\nI0223 20:43:43.581017 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc041ab4a20, {READY }\nI0223 20:43:43.595471 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:43:53.112749 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:43:53.112838 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:43:53.112856 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:43:53.112973 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03430bbf0, {CONNECTING }\nI0223 20:43:53.122408 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03430bbf0, {READY }\nI0223 20:43:53.123318 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:44:07.544317 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:44:07.544361 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:44:07.544377 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:44:07.544468 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0297f5870, {CONNECTING }\nI0223 20:44:07.557982 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0297f5870, {READY }\nI0223 20:44:07.561703 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:44:12.140421 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:44:12.140473 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:44:12.140489 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:44:12.140861 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01546ed00, {CONNECTING }\nI0223 20:44:12.154223 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01546ed00, {READY }\nI0223 20:44:12.155119 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:44:17.518283 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 20:44:17.518341 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:44:17.519722 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:44:17.520818 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:44:22.731655 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:44:22.731716 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:44:22.731735 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:44:22.731979 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc005efe070, {CONNECTING }\nI0223 20:44:22.744255 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc005efe070, {READY }\nI0223 20:44:22.745639 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:44:32.875093 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 20:44:32.875150 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:44:32.876439 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:44:32.877680 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nE0223 20:44:33.127814 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:44:33.127845 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:44:33.139047 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:44:33.139080 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:44:33.156963 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:44:33.156993 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:44:33.169003 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:44:33.169032 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:44:34.177027 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:44:34.177094 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:44:34.177112 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:44:34.177544 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03507db50, {CONNECTING }\nI0223 20:44:34.197367 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03507db50, {READY }\nI0223 20:44:34.199514 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:44:43.562672 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:44:43.562731 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:44:43.562746 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:44:43.562999 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02990b710, {CONNECTING }\nI0223 20:44:43.573317 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02990b710, {READY }\nI0223 20:44:43.574376 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:44:45.654942 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:44:45.655056 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:44:45.655077 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:44:45.655236 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d8f8070, {CONNECTING }\nI0223 20:44:45.667221 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d8f8070, {READY }\nI0223 20:44:45.668732 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:44:54.392684 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:44:54.392743 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:44:54.392760 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:44:54.392998 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0085985d0, {CONNECTING }\nI0223 20:44:54.412097 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0085985d0, {READY }\nI0223 20:44:54.414017 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:45:16.307641 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:45:16.307685 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:45:16.307700 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:45:16.307807 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ed47000, {CONNECTING }\nI0223 20:45:16.317114 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ed47000, {READY }\nI0223 20:45:16.317960 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:45:16.683975 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:45:16.684048 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:45:16.684064 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:45:16.684170 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e1803f0, {CONNECTING }\nI0223 20:45:16.692978 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e1803f0, {READY }\nI0223 20:45:16.693879 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:45:21.622624 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:45:21.622676 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:45:21.622687 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:45:21.622891 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e11e570, {CONNECTING }\nI0223 20:45:21.638485 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e11e570, {READY }\nI0223 20:45:21.639785 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:45:24.540032 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:45:24.540088 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:45:24.540105 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:45:24.540287 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01be2cda0, {CONNECTING }\nI0223 20:45:24.552803 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01be2cda0, {READY }\nI0223 20:45:24.554510 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:45:33.143276 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:45:33.143314 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:45:33.148635 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:45:33.148658 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:45:33.170395 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:45:33.170422 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:45:33.175335 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:45:33.175370 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:45:56.648222 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:45:56.648277 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:45:56.648295 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:45:56.648377 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02cd60e80, {CONNECTING }\nI0223 20:45:56.661227 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02cd60e80, {READY }\nI0223 20:45:56.662669 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:45:56.983781 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:45:56.983836 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:45:56.983854 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:45:56.984167 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d0bb5b0, {CONNECTING }\nI0223 20:45:56.993131 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d0bb5b0, {READY }\nI0223 20:45:56.994051 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:45:57.422785 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:45:57.422842 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:45:57.422859 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:45:57.423110 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d0a2a00, {CONNECTING }\nI0223 20:45:57.432129 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d0a2a00, {READY }\nI0223 20:45:57.433103 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:46:00.604615 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:46:00.604807 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:46:00.606107 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:46:04.373420 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:46:04.373483 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:46:04.373501 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:46:04.373863 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02274d4c0, {CONNECTING }\nI0223 20:46:04.388259 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02274d4c0, {READY }\nI0223 20:46:04.390158 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:46:38.202597 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:46:38.202654 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:46:38.202671 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:46:38.202952 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc013986960, {CONNECTING }\nI0223 20:46:38.216294 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc013986960, {READY }\nI0223 20:46:38.217940 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:46:41.496189 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:46:41.496248 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:46:41.496263 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:46:41.496352 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0151292d0, {CONNECTING }\nI0223 20:46:41.507757 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0151292d0, {READY }\nI0223 20:46:41.508696 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:46:41.638229 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:46:41.638282 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:46:41.638300 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:46:41.638511 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015188d10, {CONNECTING }\nI0223 20:46:41.649116 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015188d10, {READY }\nI0223 20:46:41.649991 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:46:43.322170 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:46:43.322260 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:46:43.322286 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:46:43.322415 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0153721f0, {CONNECTING }\nI0223 20:46:43.335190 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0153721f0, {READY }\nI0223 20:46:43.336499 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:46:48.127462 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:46:48.127570 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:46:48.128524 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:47:12.514844 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:47:12.514888 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:47:12.514900 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:47:12.515204 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034d3f7a0, {CONNECTING }\nI0223 20:47:12.529567 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034d3f7a0, {READY }\nI0223 20:47:12.531954 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:47:19.102771 17 controller.go:606] quota admission added evaluator for: roles.rbac.authorization.k8s.io\nI0223 20:47:19.109445 17 controller.go:606] quota admission added evaluator for: roles.rbac.authorization.k8s.io\nI0223 20:47:19.283065 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:47:19.283113 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:47:19.299851 17 store.go:1376] Monitoring rolebindingrestrictions.authorization.openshift.io count at //authorization.openshift.io/rolebindingrestrictions\nI0223 20:47:19.305439 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:47:24.838775 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:47:24.838819 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:47:24.838833 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:47:24.838995 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02951ffd0, {CONNECTING }\nI0223 20:47:24.853325 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02951ffd0, {READY }\nI0223 20:47:24.854711 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:47:25.253815 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:47:25.253865 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:47:25.253875 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:47:25.254256 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0130327a0, {CONNECTING }\nI0223 20:47:25.263457 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0130327a0, {READY }\nI0223 20:47:25.264261 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:47:26.319575 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:47:26.319618 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:47:26.319633 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:47:26.319797 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015ac0190, {CONNECTING }\nI0223 20:47:26.329434 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015ac0190, {READY }\nI0223 20:47:26.330325 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:47:33.161998 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:47:33.162034 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:47:33.171961 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:47:33.172075 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:47:33.181069 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:47:33.181146 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:47:33.194394 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:47:33.194501 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:47:48.067033 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:47:48.067090 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:47:48.067109 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:47:48.067328 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01dc6ee10, {CONNECTING }\nI0223 20:47:48.080711 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01dc6ee10, {READY }\nI0223 20:47:48.082230 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:48:04.160961 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:48:04.161077 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:48:04.161098 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:48:04.161640 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02dc8e200, {CONNECTING }\nI0223 20:48:04.173131 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02dc8e200, {READY }\nI0223 20:48:04.174274 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:48:06.097752 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:48:06.097810 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:48:06.097825 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:48:06.098262 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02de9a1d0, {CONNECTING }\nI0223 20:48:06.109492 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02de9a1d0, {READY }\nI0223 20:48:06.110632 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:48:06.710073 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:48:06.710120 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:48:06.710131 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:48:06.710397 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01aa0f4b0, {CONNECTING }\nI0223 20:48:06.722490 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01aa0f4b0, {READY }\nI0223 20:48:06.723982 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:48:33.076770 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:48:33.076817 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:48:33.076834 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:48:33.076984 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0223e5900, {CONNECTING }\nI0223 20:48:33.087945 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0223e5900, {READY }\nI0223 20:48:33.089426 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:48:40.597484 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:48:40.597654 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:48:40.598812 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:48:41.803603 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:48:41.803647 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:48:41.803663 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:48:41.804043 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015149aa0, {CONNECTING }\nI0223 20:48:41.813580 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015149aa0, {READY }\nI0223 20:48:41.814646 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:48:47.986164 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:48:47.986221 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:48:47.986237 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:48:47.986528 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01fccc220, {CONNECTING }\nI0223 20:48:48.003177 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01fccc220, {READY }\nI0223 20:48:48.008794 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:48:48.531057 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:48:48.531108 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:48:48.531125 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:48:48.531361 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc035803a60, {CONNECTING }\nI0223 20:48:48.543147 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc035803a60, {READY }\nI0223 20:48:48.544567 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:49:16.776424 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:49:16.776478 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:49:16.776523 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:49:16.776778 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016ef51b0, {CONNECTING }\nI0223 20:49:16.789344 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016ef51b0, {READY }\nI0223 20:49:16.790658 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:49:25.099321 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:49:25.099377 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:49:25.099434 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:49:25.099547 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01dc0c220, {CONNECTING }\nI0223 20:49:25.108815 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01dc0c220, {READY }\nI0223 20:49:25.109699 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:49:30.689810 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:49:30.689867 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:49:30.689884 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:49:30.690151 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c4d1fb0, {CONNECTING }\nI0223 20:49:30.701280 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c4d1fb0, {READY }\nI0223 20:49:30.702226 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:49:32.353274 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:49:32.353356 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:49:32.353375 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:49:32.353639 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023a45030, {CONNECTING }\nI0223 20:49:32.364738 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023a45030, {READY }\nI0223 20:49:32.366118 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:49:33.135780 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:49:33.135814 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:49:33.161407 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:49:33.161475 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:49:33.178158 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:49:33.178313 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:49:33.200654 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:49:33.201580 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:50:00.130147 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:50:00.130206 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:50:00.130221 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:50:00.130406 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0156e69c0, {CONNECTING }\nI0223 20:50:00.144220 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0156e69c0, {READY }\nI0223 20:50:00.145704 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:50:01.075451 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:50:01.075506 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:50:01.075521 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:50:01.075771 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ba89920, {CONNECTING }\nI0223 20:50:01.084747 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ba89920, {READY }\nI0223 20:50:01.085699 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:50:02.675152 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:50:02.675257 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:50:02.676509 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:50:08.422010 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:50:08.422068 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:50:08.422198 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:50:08.422333 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b7d4460, {CONNECTING }\nI0223 20:50:08.434103 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b7d4460, {READY }\nI0223 20:50:08.435508 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:50:12.344081 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:50:12.344124 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:50:12.344137 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:50:12.344250 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ae83a40, {CONNECTING }\nI0223 20:50:12.354151 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ae83a40, {READY }\nI0223 20:50:12.354969 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:50:33.143200 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:50:33.143231 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:50:33.166982 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:50:33.167006 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:50:33.193102 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:50:33.193130 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:50:33.216531 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:50:33.216558 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:50:42.759669 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:50:42.759902 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:50:42.760088 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:50:42.760345 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c0a9b90, {CONNECTING }\nI0223 20:50:42.773632 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c0a9b90, {READY }\nI0223 20:50:42.775410 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:50:46.068453 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:50:46.068512 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:50:46.068569 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:50:46.068641 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0266cf030, {CONNECTING }\nI0223 20:50:46.081496 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0266cf030, {READY }\nI0223 20:50:46.083984 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:50:52.701466 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:50:52.701523 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:50:52.701540 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:50:52.701840 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0121b7130, {CONNECTING }\nI0223 20:50:52.715977 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0121b7130, {READY }\nI0223 20:50:52.718156 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:50:53.311040 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:50:53.311140 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:50:53.311160 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:50:53.311317 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00f3ff170, {CONNECTING }\nI0223 20:50:53.320596 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00f3ff170, {READY }\nI0223 20:50:53.322356 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:51:24.888409 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:51:24.888469 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:51:24.888502 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:51:24.888775 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fb33b20, {CONNECTING }\nI0223 20:51:24.900449 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fb33b20, {READY }\nI0223 20:51:24.901896 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:51:26.011862 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:51:26.011954 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:51:26.011973 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:51:26.012245 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fbb9760, {CONNECTING }\nI0223 20:51:26.021458 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fbb9760, {READY }\nI0223 20:51:26.022425 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:51:26.109933 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:51:26.110070 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:51:26.110121 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:51:26.110455 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fc33a10, {CONNECTING }\nI0223 20:51:26.131475 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fc33a10, {READY }\nI0223 20:51:26.133110 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:51:30.910033 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:51:30.910087 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:51:30.910102 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:51:30.910216 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0300e0e30, {CONNECTING }\nI0223 20:51:30.919647 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0300e0e30, {READY }\nI0223 20:51:30.920676 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:51:31.978482 17 trace.go:205] Trace[2015023171]: "List" url:/apis/console.openshift.io/v1/consolequickstarts,user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74,client:::1 (23-Feb-2021 20:51:31.390) (total time: 587ms):\nTrace[2015023171]: ---"Writing http response done" count:11 578ms (20:51:00.978)\nTrace[2015023171]: [587.639649ms] [587.639649ms] END\nI0223 20:51:56.147949 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:51:56.148004 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:51:56.148020 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:51:56.148192 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02cde6660, {CONNECTING }\nI0223 20:51:56.159721 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02cde6660, {READY }\nI0223 20:51:56.160867 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:51:57.502854 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:51:57.502908 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:51:57.502959 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:51:57.503121 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0201312f0, {CONNECTING }\nI0223 20:51:57.522625 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0201312f0, {READY }\nI0223 20:51:57.526002 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:52:06.172487 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:52:06.172532 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:52:06.172546 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:52:06.172696 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03514a2f0, {CONNECTING }\nI0223 20:52:06.182502 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03514a2f0, {READY }\nI0223 20:52:06.183794 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:52:10.388500 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:52:10.388555 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:52:10.388591 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:52:10.388742 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029890ef0, {CONNECTING }\nI0223 20:52:10.398371 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029890ef0, {READY }\nI0223 20:52:10.399231 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:52:20.377182 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:52:20.377276 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:52:20.378388 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:52:28.382220 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:52:28.382277 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:52:28.382307 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:52:28.382445 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00996b6a0, {CONNECTING }\nI0223 20:52:28.395093 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00996b6a0, {READY }\nI0223 20:52:28.396389 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:52:33.157096 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:52:33.157123 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:52:33.177624 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:52:33.177653 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:52:33.198637 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:52:33.198661 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:52:33.228820 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:52:33.228853 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:52:36.539762 17 cacher.go:782] cacher (*core.ConfigMap): 7 objects queued in incoming channel.\nI0223 20:52:36.539796 17 cacher.go:782] cacher (*core.ConfigMap): 8 objects queued in incoming channel.\nI0223 20:52:36.539815 17 cacher.go:782] cacher (*core.ConfigMap): 9 objects queued in incoming channel.\nI0223 20:52:36.539825 17 cacher.go:782] cacher (*core.ConfigMap): 10 objects queued in incoming channel.\nI0223 20:52:42.221832 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:52:42.221888 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:52:42.221904 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:52:42.222051 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc07006c7f0, {CONNECTING }\nI0223 20:52:42.233205 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc07006c7f0, {READY }\nI0223 20:52:42.234554 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:52:45.821230 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:52:45.821290 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:52:45.821307 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:52:45.821462 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014183620, {CONNECTING }\nI0223 20:52:45.830618 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014183620, {READY }\nI0223 20:52:45.831481 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:52:48.036241 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:52:48.036294 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:52:48.036309 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:52:48.036546 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0148cffc0, {CONNECTING }\nI0223 20:52:48.047562 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0148cffc0, {READY }\nI0223 20:52:48.049543 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:53:01.408708 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:53:01.408753 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:53:01.408766 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:53:01.409104 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01fc60030, {CONNECTING }\nI0223 20:53:01.420287 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01fc60030, {READY }\nI0223 20:53:01.421548 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:53:02.705039 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:53:02.705137 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:53:02.706110 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:53:16.028055 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:53:16.028107 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:53:16.028124 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:53:16.028387 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0203a0bb0, {CONNECTING }\nI0223 20:53:16.038227 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0203a0bb0, {READY }\nI0223 20:53:16.039165 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:53:26.326861 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:53:26.327127 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:53:26.327264 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:53:26.327693 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fafa050, {CONNECTING }\nI0223 20:53:26.342632 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fafa050, {READY }\nI0223 20:53:26.346389 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:53:32.664976 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:53:32.665037 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:53:32.665054 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:53:32.665196 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0301d4060, {CONNECTING }\nI0223 20:53:32.677979 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0301d4060, {READY }\nI0223 20:53:32.678953 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:53:34.923387 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:53:34.923446 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:53:34.923484 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:53:34.923718 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028f11af0, {CONNECTING }\nI0223 20:53:34.936034 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028f11af0, {READY }\nI0223 20:53:34.937295 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:53:47.054890 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:53:47.054970 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:53:47.054987 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:53:47.055231 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01580ae60, {CONNECTING }\nI0223 20:53:47.064789 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01580ae60, {READY }\nI0223 20:53:47.066079 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:54:04.611266 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:54:04.611312 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:54:04.611328 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:54:04.611530 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b276260, {CONNECTING }\nI0223 20:54:04.621766 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b276260, {READY }\nI0223 20:54:04.622651 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:54:10.994488 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:54:10.994586 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:54:10.994608 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:54:10.994968 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034d2e1a0, {CONNECTING }\nI0223 20:54:11.007094 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034d2e1a0, {READY }\nI0223 20:54:11.008532 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:54:15.098591 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:54:15.098654 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:54:15.098672 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:54:15.098762 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02917e000, {CONNECTING }\nI0223 20:54:15.111314 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02917e000, {READY }\nI0223 20:54:15.119994 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:54:25.404747 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:54:25.404802 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:54:25.404818 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:54:25.404902 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029ca1450, {CONNECTING }\nI0223 20:54:25.414947 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029ca1450, {READY }\nI0223 20:54:25.415814 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:54:33.133589 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:54:33.133626 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:54:33.147706 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:54:33.147735 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:54:33.164727 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:54:33.164749 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:54:33.180695 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:54:33.180891 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:54:41.910661 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 20:54:41.910839 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:54:41.911962 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:54:41.913244 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:54:46.848800 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:54:46.848853 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:54:46.848867 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:54:46.849173 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc045caefd0, {CONNECTING }\nI0223 20:54:46.861029 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc045caefd0, {READY }\nI0223 20:54:46.862811 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:54:49.462197 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:54:49.462252 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:54:49.462269 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:54:49.462355 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc045633a30, {CONNECTING }\nI0223 20:54:49.472117 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc045633a30, {READY }\nI0223 20:54:49.473474 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:54:53.215228 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:54:53.215295 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:54:53.215311 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:54:53.215426 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01095b400, {CONNECTING }\nI0223 20:54:53.227056 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01095b400, {READY }\nI0223 20:54:53.228442 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:55:05.462467 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:55:05.462538 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:55:05.462550 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:55:05.462705 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0073825e0, {CONNECTING }\nI0223 20:55:05.472563 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0073825e0, {READY }\nI0223 20:55:05.473764 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:55:24.507141 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:55:24.507186 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:55:24.507202 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:55:24.507271 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc027f44c90, {CONNECTING }\nI0223 20:55:24.523572 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc027f44c90, {READY }\nI0223 20:55:24.525387 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:55:29.830268 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:55:29.830324 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:55:29.830341 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:55:29.830746 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01485aa30, {CONNECTING }\nI0223 20:55:29.841489 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01485aa30, {READY }\nI0223 20:55:29.842416 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:55:33.138632 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:55:33.138669 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:55:33.162570 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:55:33.162599 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:55:33.170932 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:55:33.170964 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:55:33.195364 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:55:33.195390 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:55:33.670033 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:55:33.670076 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:55:33.670087 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:55:33.670360 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d4bf940, {CONNECTING }\nI0223 20:55:33.680745 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d4bf940, {READY }\nI0223 20:55:33.682259 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:55:47.925831 17 trace.go:205] Trace[1745199532]: "List etcd3" key:/operators.coreos.com/clusterserviceversions,resourceVersion:,resourceVersionMatch:,limit:250,continue: (23-Feb-2021 20:55:46.799) (total time: 1126ms):\nTrace[1745199532]: [1.12663036s] [1.12663036s] END\nI0223 20:55:48.313986 17 trace.go:205] Trace[817688681]: "List" url:/apis/operators.coreos.com/v1alpha1/clusterserviceversions,user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36,client:::1 (23-Feb-2021 20:55:46.799) (total time: 1514ms):\nTrace[817688681]: ---"Listing from storage done" 1127ms (20:55:00.926)\nTrace[817688681]: ---"Writing http response done" count:189 387ms (20:55:00.313)\nTrace[817688681]: [1.514897016s] [1.514897016s] END\nI0223 20:55:49.899641 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:55:49.899687 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:55:49.899699 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:55:49.900024 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0125964f0, {CONNECTING }\nI0223 20:55:49.908818 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0125964f0, {READY }\nI0223 20:55:49.909640 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:56:06.745902 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:56:06.745958 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:56:06.745973 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:56:06.746463 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01485af80, {CONNECTING }\nI0223 20:56:06.763573 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01485af80, {READY }\nI0223 20:56:06.767425 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:56:08.522410 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:56:08.522455 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:56:08.522466 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:56:08.522551 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c97cf20, {CONNECTING }\nI0223 20:56:08.536751 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c97cf20, {READY }\nI0223 20:56:08.539037 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:56:11.079607 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:56:11.079650 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:56:11.079661 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:56:11.079845 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc04f7973e0, {CONNECTING }\nI0223 20:56:11.091179 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc04f7973e0, {READY }\nI0223 20:56:11.092882 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:56:27.495642 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:56:27.495695 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:56:27.495711 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:56:27.496001 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03430f2a0, {CONNECTING }\nI0223 20:56:27.508763 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03430f2a0, {READY }\nI0223 20:56:27.510388 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:56:47.853307 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:56:47.853360 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:56:47.853375 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:56:47.853571 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc013c82a80, {CONNECTING }\nI0223 20:56:47.873466 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc013c82a80, {READY }\nI0223 20:56:47.875013 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:56:49.059261 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:56:49.059312 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:56:49.059327 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:56:49.059581 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014a97ec0, {CONNECTING }\nI0223 20:56:49.068009 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014a97ec0, {READY }\nI0223 20:56:49.068947 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:56:55.975977 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:56:55.976033 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:56:55.976047 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:56:55.976153 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028ef1c30, {CONNECTING }\nI0223 20:56:55.988528 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028ef1c30, {READY }\nI0223 20:56:55.989940 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:57:04.807640 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:57:04.807697 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:57:04.807715 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:57:04.807985 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0315b0d00, {CONNECTING }\nI0223 20:57:04.817189 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0315b0d00, {READY }\nI0223 20:57:04.818180 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:57:24.009584 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:57:24.009642 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:57:24.009658 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:57:24.009784 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fa4a870, {CONNECTING }\nI0223 20:57:24.018776 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fa4a870, {READY }\nI0223 20:57:24.019736 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:57:31.208512 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:57:31.208583 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:57:31.208603 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:57:31.209598 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0303d3d30, {CONNECTING }\nI0223 20:57:31.220208 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0303d3d30, {READY }\nI0223 20:57:31.221665 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:57:33.149561 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:57:33.149595 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:57:33.171958 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:57:33.171991 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:57:33.185050 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:57:33.185075 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:57:33.200998 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:57:33.201063 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:57:38.077202 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:57:38.077258 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:57:38.077276 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:57:38.077393 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0138bbcf0, {CONNECTING }\nI0223 20:57:38.090368 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0138bbcf0, {READY }\nI0223 20:57:38.091867 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:57:45.424150 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:57:45.424193 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:57:45.424204 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:57:45.424283 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015766020, {CONNECTING }\nI0223 20:57:45.439607 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015766020, {READY }\nI0223 20:57:45.441138 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:57:54.498709 17 trace.go:205] Trace[299378945]: "List etcd3" key:/operators.coreos.com/clusterserviceversions,resourceVersion:,resourceVersionMatch:,limit:250,continue: (23-Feb-2021 20:57:53.872) (total time: 626ms):\nTrace[299378945]: [626.125226ms] [626.125226ms] END\nI0223 20:57:54.538773 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:57:54.538833 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:57:54.538849 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:57:54.539024 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00d4cf440, {CONNECTING }\nI0223 20:57:54.548469 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00d4cf440, {READY }\nI0223 20:57:54.549462 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:57:57.774040 17 trace.go:205] Trace[893063468]: "List" url:/apis/operators.coreos.com/v1alpha1/clusterserviceversions,user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36,client:::1 (23-Feb-2021 20:57:53.872) (total time: 3901ms):\nTrace[893063468]: ---"Listing from storage done" 627ms (20:57:00.499)\nTrace[893063468]: ---"Writing http response done" count:189 3274ms (20:57:00.773)\nTrace[893063468]: [3.901511293s] [3.901511293s] END\nI0223 20:58:13.868875 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:58:13.868977 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:58:13.868998 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:58:13.869240 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc031609460, {CONNECTING }\nI0223 20:58:13.880684 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc031609460, {READY }\nI0223 20:58:13.881971 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:58:19.976102 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:58:19.976152 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:58:19.976184 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:58:19.976459 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015f006e0, {CONNECTING }\nI0223 20:58:19.989173 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015f006e0, {READY }\nI0223 20:58:19.990899 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:58:29.666324 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:58:29.666386 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:58:29.666401 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:58:29.666620 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fbb8720, {CONNECTING }\nI0223 20:58:29.677687 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fbb8720, {READY }\nI0223 20:58:29.678442 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:58:32.617009 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 20:58:32.617073 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:58:32.618343 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:58:32.619328 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:58:33.923615 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:58:33.923673 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:58:33.923689 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:58:33.923802 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc030021ec0, {CONNECTING }\nI0223 20:58:33.933365 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc030021ec0, {READY }\nI0223 20:58:33.934331 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:58:53.765294 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:58:53.765341 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:58:53.765352 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:58:53.765495 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02730ad10, {CONNECTING }\nI0223 20:58:53.778849 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02730ad10, {READY }\nI0223 20:58:53.780316 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:59:02.242823 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:59:02.242875 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:59:02.242887 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:59:02.243007 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03584f780, {CONNECTING }\nI0223 20:59:02.254549 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03584f780, {READY }\nI0223 20:59:02.256310 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:59:09.427861 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:59:09.427953 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:59:09.427973 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:59:09.428147 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034270050, {CONNECTING }\nI0223 20:59:09.437494 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034270050, {READY }\nI0223 20:59:09.438336 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:59:11.592651 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:59:11.592701 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:59:11.592716 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:59:11.592858 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0348aa3e0, {CONNECTING }\nI0223 20:59:11.601687 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0348aa3e0, {READY }\nI0223 20:59:11.602560 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:59:33.139778 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:59:33.139818 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:59:33.181179 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:59:33.181607 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:59:33.209743 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:59:33.209793 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:59:33.227711 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:59:33.227748 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:59:36.670024 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:59:36.670068 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:59:36.670079 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:59:36.670175 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc011aba810, {CONNECTING }\nI0223 20:59:36.684466 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc011aba810, {READY }\nI0223 20:59:36.685978 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:59:38.572340 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:59:38.572392 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:59:38.572408 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:59:38.572633 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015ccb400, {CONNECTING }\nI0223 20:59:38.586853 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015ccb400, {READY }\nI0223 20:59:38.588996 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:59:40.393782 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:59:40.393915 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:59:40.395025 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:59:45.374500 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:59:45.374551 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:59:45.374563 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:59:45.374679 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015fd83d0, {CONNECTING }\nI0223 20:59:45.383380 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015fd83d0, {READY }\nI0223 20:59:45.385059 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:59:47.279848 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:59:47.279902 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:59:47.279919 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:59:47.280079 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc012467b60, {CONNECTING }\nI0223 20:59:47.289122 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc012467b60, {READY }\nI0223 20:59:47.290121 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:00:10.581422 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:00:10.581478 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:00:10.581495 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:00:10.581815 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ff4e930, {CONNECTING }\nI0223 21:00:10.593812 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ff4e930, {READY }\nI0223 21:00:10.595580 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:00:11.852376 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:00:11.852429 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:00:11.852443 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:00:11.852707 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02bb5d240, {CONNECTING }\nI0223 21:00:11.864462 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02bb5d240, {READY }\nI0223 21:00:11.865804 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:00:23.268787 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:00:23.268833 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:00:23.268849 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:00:23.268964 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ba35ae0, {CONNECTING }\nI0223 21:00:23.278282 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02ba35ae0, {READY }\nI0223 21:00:23.279111 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:00:29.985885 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:00:29.985973 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:00:29.985988 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:00:29.986206 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c350710, {CONNECTING }\nI0223 21:00:29.999262 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c350710, {READY }\nI0223 21:00:30.000287 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:00:33.145100 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:00:33.145127 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 21:00:33.195274 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:00:33.195316 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:00:33.214723 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:00:33.214749 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:00:33.242627 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:00:33.242652 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nI0223 21:00:46.572857 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:00:46.572950 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:00:46.572970 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:00:46.573099 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02422f8b0, {CONNECTING }\nI0223 21:00:46.586751 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02422f8b0, {READY }\nI0223 21:00:46.588254 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:00:48.281654 17 wrap.go:54] timeout or abort while handling: POST "/api/v1/namespaces/josh/events"\nI0223 21:00:51.413204 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:00:51.413260 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:00:51.413276 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:00:51.413535 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c105ba0, {CONNECTING }\nI0223 21:00:51.425566 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c105ba0, {READY }\nI0223 21:00:51.427182 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:00:55.779190 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:00:55.779233 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:00:55.779246 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:00:55.779401 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014a6f9d0, {CONNECTING }\nI0223 21:00:55.788567 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014a6f9d0, {READY }\nI0223 21:00:55.792642 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:01:10.095213 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:01:10.095273 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:01:10.095290 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:01:10.095694 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03bb99a40, {CONNECTING }\nI0223 21:01:10.105098 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03bb99a40, {READY }\nI0223 21:01:10.105744 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:01:19.925012 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:01:19.925057 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:01:19.925072 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:01:19.925309 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc017e3b570, {CONNECTING }\nI0223 21:01:19.938970 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc017e3b570, {READY }\nI0223 21:01:19.940780 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:01:26.979241 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:01:26.979303 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:01:26.979315 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:01:26.979595 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0255aa7c0, {CONNECTING }\nI0223 21:01:26.991343 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0255aa7c0, {READY }\nI0223 21:01:26.992838 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:01:38.801287 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:01:38.801347 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:01:38.801364 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:01:38.801522 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc035280340, {CONNECTING }\nI0223 21:01:38.815274 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc035280340, {READY }\nI0223 21:01:38.816699 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:01:47.544109 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:01:47.544156 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:01:47.544174 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:01:47.544437 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0315b1ca0, {CONNECTING }\nI0223 21:01:47.555262 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0315b1ca0, {READY }\nI0223 21:01:47.556258 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:01:53.870236 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:01:53.870284 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:01:53.870300 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:01:53.870527 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f8107b0, {CONNECTING }\nI0223 21:01:53.882099 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f8107b0, {READY }\nI0223 21:01:53.883593 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:02:02.362658 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:02:02.362758 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:02:02.363912 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nE0223 21:02:06.323845 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 21:02:06.323900 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:02:06.325117 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:02:06.326229 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:02:07.770918 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:02:07.770969 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:02:07.771031 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:02:07.771245 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0354b9900, {CONNECTING }\nI0223 21:02:07.784597 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0354b9900, {READY }\nI0223 21:02:07.786455 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:02:18.478449 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:02:18.478504 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:02:18.478536 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:02:18.478615 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d5f0460, {CONNECTING }\nI0223 21:02:18.493769 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d5f0460, {READY }\nI0223 21:02:18.494742 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:02:23.390101 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:02:23.390157 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:02:23.390173 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:02:23.390350 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0415757a0, {CONNECTING }\nI0223 21:02:23.400461 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0415757a0, {READY }\nI0223 21:02:23.401419 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:02:30.005432 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:02:30.005481 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:02:30.005497 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:02:30.005590 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc035883ed0, {CONNECTING }\nI0223 21:02:30.017189 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc035883ed0, {READY }\nI0223 21:02:30.018598 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:02:33.157223 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:02:33.157257 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 21:02:33.205588 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:02:33.205620 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:02:33.223841 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:02:33.223876 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:02:33.252215 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:02:33.252245 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nI0223 21:02:43.269530 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:02:43.269586 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:02:43.269602 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:02:43.270020 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034869d60, {CONNECTING }\nI0223 21:02:43.286628 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034869d60, {READY }\nI0223 21:02:43.288161 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:03:00.614156 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:03:00.614216 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:03:00.614229 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:03:00.614465 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00b3d9930, {CONNECTING }\nI0223 21:03:00.624842 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00b3d9930, {READY }\nI0223 21:03:00.625725 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:03:03.053675 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:03:03.053744 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:03:03.053762 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:03:03.053833 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc009ea3960, {CONNECTING }\nI0223 21:03:03.067367 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc009ea3960, {READY }\nI0223 21:03:03.068256 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:03:03.227592 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:03:03.227638 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:03:03.227654 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:03:03.227840 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c565330, {CONNECTING }\nI0223 21:03:03.239308 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c565330, {READY }\nI0223 21:03:03.241365 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:03:16.591906 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:03:16.592007 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:03:16.592026 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:03:16.592251 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc012466a80, {CONNECTING }\nI0223 21:03:16.605002 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc012466a80, {READY }\nI0223 21:03:16.606981 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:03:33.962775 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:03:33.962820 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:03:33.962853 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:03:33.963085 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03168c790, {CONNECTING }\nI0223 21:03:33.973659 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03168c790, {READY }\nI0223 21:03:33.974543 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:03:37.440805 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:03:37.440885 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:03:37.440903 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:03:37.441390 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034fd8ea0, {CONNECTING }\nI0223 21:03:37.454414 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034fd8ea0, {READY }\nI0223 21:03:37.455412 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:03:39.056364 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:03:39.056424 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:03:39.056441 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:03:39.056536 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0315c9e10, {CONNECTING }\nI0223 21:03:39.069984 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0315c9e10, {READY }\nI0223 21:03:39.071582 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:04:00.726109 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:04:00.726167 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:04:00.726182 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:04:00.726407 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f0fbc10, {CONNECTING }\nI0223 21:04:00.742540 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f0fbc10, {READY }\nI0223 21:04:00.744968 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:04:08.623092 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:04:08.623149 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:04:08.623166 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:04:08.623376 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc032d94810, {CONNECTING }\nI0223 21:04:08.632011 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc032d94810, {READY }\nI0223 21:04:08.633373 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:04:12.523623 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:04:12.523666 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:04:12.523676 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:04:12.523763 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023ce03f0, {CONNECTING }\nI0223 21:04:12.536439 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023ce03f0, {READY }\nI0223 21:04:12.537976 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:04:13.599273 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:04:13.599326 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:04:13.599342 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:04:13.599568 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03430b560, {CONNECTING }\nI0223 21:04:13.609162 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03430b560, {READY }\nI0223 21:04:13.610184 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:04:33.142564 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:04:33.142609 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:04:33.159469 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:04:33.159505 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 21:04:33.178203 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:04:33.178237 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:04:33.194471 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:04:33.194507 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 21:04:41.892563 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:04:41.892606 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:04:41.892616 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:04:41.892698 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc012533b10, {CONNECTING }\nI0223 21:04:41.905664 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc012533b10, {READY }\nI0223 21:04:41.907115 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:04:50.163438 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:04:50.163484 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:04:50.163495 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:04:50.163767 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0241ead30, {CONNECTING }\nI0223 21:04:50.175023 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0241ead30, {READY }\nI0223 21:04:50.176845 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:04:50.937585 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:04:50.937638 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:04:50.937654 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:04:50.937794 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc026f55d40, {CONNECTING }\nI0223 21:04:50.949348 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc026f55d40, {READY }\nI0223 21:04:50.950733 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:04:55.267409 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:04:55.267466 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:04:55.267483 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:04:55.267863 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc027f44d30, {CONNECTING }\nI0223 21:04:55.277246 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc027f44d30, {READY }\nI0223 21:04:55.278202 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:05:03.200396 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:05:03.200521 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:05:03.201473 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nE0223 21:05:10.725056 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:05:10.725153 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:05:10.726997 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:05:12.011125 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:05:12.011175 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:05:12.011192 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:05:12.011456 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc04f796890, {CONNECTING }\nI0223 21:05:12.024868 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc04f796890, {READY }\nI0223 21:05:12.026659 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:05:26.196390 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:05:26.196441 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:05:26.196457 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:05:26.196637 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015ffb300, {CONNECTING }\nI0223 21:05:26.208362 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015ffb300, {READY }\nI0223 21:05:26.209868 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:05:30.378500 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:05:30.378555 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:05:30.378584 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:05:30.379037 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03b64e4a0, {CONNECTING }\nI0223 21:05:30.388416 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03b64e4a0, {READY }\nI0223 21:05:30.389386 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:05:33.159276 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:05:33.159311 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:05:33.172207 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:05:33.172240 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 21:05:33.183813 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:05:33.183839 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:05:33.208408 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:05:33.208431 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 21:05:38.711800 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:05:38.711895 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:05:38.711915 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:05:38.712309 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e012800, {CONNECTING }\nI0223 21:05:38.724569 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e012800, {READY }\nI0223 21:05:38.725572 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:05:43.986274 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:05:43.986330 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:05:43.986350 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:05:43.986449 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01f26b710, {CONNECTING }\nI0223 21:05:44.001303 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01f26b710, {READY }\nI0223 21:05:44.004466 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:06:06.860539 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:06:06.860594 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:06:06.860610 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:06:06.860741 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc032372140, {CONNECTING }\nI0223 21:06:06.870333 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc032372140, {READY }\nI0223 21:06:06.871687 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:06:07.104928 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 21:06:07.105345 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:06:07.106472 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:06:07.107849 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:06:10.969070 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:06:10.969126 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:06:10.969143 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:06:10.969353 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc030540a90, {CONNECTING }\nI0223 21:06:10.981406 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc030540a90, {READY }\nI0223 21:06:10.983061 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:06:18.912754 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:06:18.912815 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:06:18.912833 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:06:18.913092 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f896110, {CONNECTING }\nI0223 21:06:18.922632 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f896110, {READY }\nI0223 21:06:18.923547 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:06:21.576907 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:06:21.576965 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:06:21.577015 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:06:21.577142 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fad9ec0, {CONNECTING }\nI0223 21:06:21.589788 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fad9ec0, {READY }\nI0223 21:06:21.594016 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:06:46.430058 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:06:46.430136 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:06:46.430154 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:06:46.430479 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc041f6da90, {CONNECTING }\nI0223 21:06:46.439664 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc041f6da90, {READY }\nI0223 21:06:46.440551 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:06:49.032520 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:06:49.032565 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:06:49.032576 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:06:49.032669 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014e80290, {CONNECTING }\nI0223 21:06:49.043094 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014e80290, {READY }\nI0223 21:06:49.044608 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:06:55.707119 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:06:55.707163 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:06:55.707174 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:06:55.707438 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0341a6170, {CONNECTING }\nI0223 21:06:55.719636 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0341a6170, {READY }\nI0223 21:06:55.722238 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:07:01.358358 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:07:01.358402 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:07:01.358413 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:07:01.358487 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0154f9260, {CONNECTING }\nI0223 21:07:01.371794 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0154f9260, {READY }\nI0223 21:07:01.373489 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:07:21.131802 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:07:21.131941 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:07:21.133013 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:07:26.204604 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:07:26.204666 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:07:26.204697 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:07:26.204967 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00e23cac0, {CONNECTING }\nI0223 21:07:26.214799 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00e23cac0, {READY }\nI0223 21:07:26.215981 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:07:27.175612 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:07:27.175721 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:07:27.175767 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:07:27.176123 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00b47f620, {CONNECTING }\nI0223 21:07:27.187284 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00b47f620, {READY }\nI0223 21:07:27.188803 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:07:28.157724 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:07:28.157784 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:07:28.157802 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:07:28.158231 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00a664560, {CONNECTING }\nI0223 21:07:28.168018 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00a664560, {READY }\nI0223 21:07:28.168927 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:07:32.717637 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:07:32.717684 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:07:32.717715 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:07:32.717889 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0119f4f80, {CONNECTING }\nI0223 21:07:32.732707 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0119f4f80, {READY }\nI0223 21:07:32.734107 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:07:33.177874 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:07:33.177952 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:07:33.187838 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:07:33.187859 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 21:07:33.202132 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:07:33.202160 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:07:33.221777 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:07:33.221798 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 21:08:05.046037 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:08:05.046088 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:08:05.046100 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:08:05.046359 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c3bc4d0, {CONNECTING }\nI0223 21:08:05.060064 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c3bc4d0, {READY }\nI0223 21:08:05.061469 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:08:06.670689 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:08:06.670734 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:08:06.670749 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:08:06.671040 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c510990, {CONNECTING }\nI0223 21:08:06.681035 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c510990, {READY }\nI0223 21:08:06.682031 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:08:11.605848 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:08:11.605890 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:08:11.605904 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:08:11.606236 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028a8cd40, {CONNECTING }\nI0223 21:08:11.615064 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028a8cd40, {READY }\nI0223 21:08:11.615868 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:08:12.296642 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:08:12.296753 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:08:12.296770 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:08:12.297120 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc031b14a10, {CONNECTING }\nI0223 21:08:12.308608 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc031b14a10, {READY }\nI0223 21:08:12.310118 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:08:23.483080 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:08:23.483293 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:08:23.484280 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:08:37.602338 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:08:37.602392 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:08:37.602407 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:08:37.602716 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc013981fa0, {CONNECTING }\nI0223 21:08:37.613867 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc013981fa0, {READY }\nI0223 21:08:37.615313 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:08:43.929841 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:08:43.929884 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:08:43.929901 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:08:43.930068 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0151717c0, {CONNECTING }\nI0223 21:08:43.942163 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0151717c0, {READY }\nI0223 21:08:43.943652 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:08:46.497978 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:08:46.498028 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:08:46.498046 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:08:46.498274 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc040823700, {CONNECTING }\nI0223 21:08:46.507932 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc040823700, {READY }\nI0223 21:08:46.508964 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:08:47.088343 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:08:47.088385 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:08:47.088396 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:08:47.088787 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0404f56d0, {CONNECTING }\nI0223 21:08:47.100069 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0404f56d0, {READY }\nI0223 21:08:47.101264 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:09:11.358995 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:09:11.359086 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:09:11.359103 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:09:11.359311 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0170676f0, {CONNECTING }\nI0223 21:09:11.381244 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0170676f0, {READY }\nI0223 21:09:11.389746 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:09:16.514191 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:09:16.514340 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:09:16.514408 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:09:16.514678 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01eb93fe0, {CONNECTING }\nI0223 21:09:16.526879 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01eb93fe0, {READY }\nI0223 21:09:16.528106 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:09:22.418594 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:09:22.418640 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:09:22.418651 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:09:22.418938 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0226efbe0, {CONNECTING }\nI0223 21:09:22.427662 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0226efbe0, {READY }\nI0223 21:09:22.429038 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:09:30.755966 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:09:30.756016 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:09:30.756028 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:09:30.756143 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0285f22b0, {CONNECTING }\nI0223 21:09:30.767783 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0285f22b0, {READY }\nI0223 21:09:30.768729 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:09:33.160341 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:09:33.160387 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:09:33.173315 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:09:33.173342 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 21:09:33.192109 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:09:33.192146 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:09:33.211207 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:09:33.211231 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 21:09:49.892266 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:09:49.892315 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:09:49.892331 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:09:49.892487 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc017a28440, {CONNECTING }\nI0223 21:09:49.904872 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc017a28440, {READY }\nI0223 21:09:49.906307 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:09:50.377489 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:09:50.377531 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:09:50.377542 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:09:50.377627 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc017f0f890, {CONNECTING }\nI0223 21:09:50.389327 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc017f0f890, {READY }\nI0223 21:09:50.390715 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:10:02.959041 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:10:02.959083 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:10:02.959098 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:10:02.959259 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e927050, {CONNECTING }\nI0223 21:10:02.969976 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e927050, {READY }\nI0223 21:10:02.970965 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:10:05.509245 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:10:05.509290 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:10:05.509306 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:10:05.509551 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ef26060, {CONNECTING }\nI0223 21:10:05.518527 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ef26060, {READY }\nI0223 21:10:05.519555 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:10:22.600348 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:10:22.600394 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:10:22.600405 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:10:22.600483 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0232fa3b0, {CONNECTING }\nI0223 21:10:22.613170 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0232fa3b0, {READY }\nI0223 21:10:22.614618 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:10:27.544766 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:10:27.544825 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:10:27.544841 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:10:27.544952 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0190b1630, {CONNECTING }\nI0223 21:10:27.567457 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0190b1630, {READY }\nI0223 21:10:27.568819 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:10:33.167608 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:10:33.167633 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:10:33.178218 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:10:33.178247 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 21:10:33.199393 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:10:33.199421 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:10:33.229489 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:10:33.229517 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 21:10:37.445561 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:10:37.445607 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:10:37.445618 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:10:37.445775 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c3bf450, {CONNECTING }\nI0223 21:10:37.455608 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c3bf450, {READY }\nI0223 21:10:37.456562 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:10:38.379012 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:10:38.379057 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:10:38.379070 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:10:38.379213 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02016df80, {CONNECTING }\nI0223 21:10:38.388396 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02016df80, {READY }\nI0223 21:10:38.389244 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:10:41.255323 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 21:10:41.255442 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:10:41.257068 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:10:41.258139 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:11:05.423021 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:11:05.423176 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:11:05.423240 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:11:05.423750 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0356386e0, {CONNECTING }\nI0223 21:11:05.437633 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0356386e0, {READY }\nI0223 21:11:05.440203 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:11:07.523097 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:11:07.523186 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:11:07.523206 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:11:07.523549 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc030541c40, {CONNECTING }\nI0223 21:11:07.535529 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc030541c40, {READY }\nI0223 21:11:07.536922 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:11:07.622956 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:11:07.623015 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:11:07.623032 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:11:07.623544 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015cc29d0, {CONNECTING }\nI0223 21:11:07.632421 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015cc29d0, {READY }\nI0223 21:11:07.633197 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:11:20.477464 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:11:20.477533 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:11:20.477547 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:11:20.477934 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fefe720, {CONNECTING }\nI0223 21:11:20.487499 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fefe720, {READY }\nI0223 21:11:20.488413 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:11:37.097027 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:11:37.097258 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:11:37.097384 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:11:37.097667 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01563aa10, {CONNECTING }\nI0223 21:11:37.113119 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01563aa10, {READY }\nI0223 21:11:37.115160 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:11:40.451772 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:11:40.451822 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:11:40.451833 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:11:40.451916 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01580b0f0, {CONNECTING }\nI0223 21:11:40.465425 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01580b0f0, {READY }\nI0223 21:11:40.466107 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:11:50.428717 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:11:50.428764 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:11:50.428842 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:11:50.428922 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b32e900, {CONNECTING }\nI0223 21:11:50.440303 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b32e900, {READY }\nI0223 21:11:50.442363 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:12:00.616802 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:12:00.616851 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:12:00.616870 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:12:00.617095 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03482bf60, {CONNECTING }\nI0223 21:12:00.626823 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03482bf60, {READY }\nI0223 21:12:00.627798 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:12:15.431867 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:12:15.431920 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:12:15.431936 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:12:15.432081 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0410740d0, {CONNECTING }\nI0223 21:12:15.446340 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0410740d0, {READY }\nI0223 21:12:15.448009 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:12:23.523528 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:12:23.523585 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:12:23.523603 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:12:23.523759 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00a7c2f20, {CONNECTING }\nI0223 21:12:23.533664 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00a7c2f20, {READY }\nI0223 21:12:23.534944 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:12:31.994296 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:12:31.994339 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:12:31.994350 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:12:31.994605 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc009037340, {CONNECTING }\nI0223 21:12:32.006810 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc009037340, {READY }\nI0223 21:12:32.008533 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:12:33.180513 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:12:33.180544 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:12:33.190380 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:12:33.190417 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 21:12:33.209568 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:12:33.209598 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:12:33.250325 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:12:33.250349 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 21:12:35.515795 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:12:35.515849 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:12:35.515868 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:12:35.515987 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021f6bd50, {CONNECTING }\nI0223 21:12:35.525891 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021f6bd50, {READY }\nI0223 21:12:35.526876 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:12:56.731024 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:12:56.731083 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:12:56.731100 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:12:56.731365 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc026221e50, {CONNECTING }\nI0223 21:12:56.743590 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc026221e50, {READY }\nI0223 21:12:56.745539 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:12:58.022560 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 21:12:58.022624 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:12:58.024487 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:12:58.025616 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:13:06.358596 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:13:06.358645 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:13:06.358656 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:13:06.358735 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01a8ed6f0, {CONNECTING }\nI0223 21:13:06.368148 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01a8ed6f0, {READY }\nI0223 21:13:06.369093 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:13:10.827852 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 21:13:10.828146 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:13:10.829989 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:13:10.831310 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:13:15.299968 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:13:15.300029 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:13:15.300044 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:13:15.300256 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc035280450, {CONNECTING }\nI0223 21:13:15.311888 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc035280450, {READY }\nI0223 21:13:15.313520 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:13:17.248615 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:13:17.248672 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:13:17.248688 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:13:17.248781 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03557b520, {CONNECTING }\nI0223 21:13:17.257583 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03557b520, {READY }\nI0223 21:13:17.258487 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:13:32.917626 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:13:32.917669 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:13:32.917680 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:13:32.917778 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03019a820, {CONNECTING }\nI0223 21:13:32.930085 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03019a820, {READY }\nI0223 21:13:32.932967 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:13:46.802149 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:13:46.802203 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:13:46.802218 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:13:46.802446 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0153d3f60, {CONNECTING }\nI0223 21:13:46.811783 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0153d3f60, {READY }\nI0223 21:13:46.812578 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:13:56.313846 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:13:56.313926 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:13:56.313945 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:13:56.314173 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d0900a0, {CONNECTING }\nI0223 21:13:56.323192 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d0900a0, {READY }\nI0223 21:13:56.324064 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:13:56.817804 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:13:56.817867 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:13:56.817887 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:13:56.818153 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01582d6a0, {CONNECTING }\nI0223 21:13:56.829723 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01582d6a0, {READY }\nI0223 21:13:56.831252 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:14:05.268374 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:14:05.268419 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:14:05.268431 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:14:05.268688 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034b1a2e0, {CONNECTING }\nI0223 21:14:05.282579 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc034b1a2e0, {READY }\nI0223 21:14:05.284560 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:14:15.883271 17 trace.go:205] Trace[1851691216]: "List etcd3" key:/operators.coreos.com/clusterserviceversions,resourceVersion:,resourceVersionMatch:,limit:250,continue: (23-Feb-2021 21:14:14.975) (total time: 908ms):\nTrace[1851691216]: [908.176311ms] [908.176311ms] END\nI0223 21:14:20.279706 17 trace.go:205] Trace[844867971]: "List" url:/apis/operators.coreos.com/v1alpha1/clusterserviceversions,user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36,client:::1 (23-Feb-2021 21:14:14.974) (total time: 5304ms):\nTrace[844867971]: ---"Listing from storage done" 908ms (21:14:00.884)\nTrace[844867971]: ---"Writing http response done" count:189 4395ms (21:14:00.279)\nTrace[844867971]: [5.304725735s] [5.304725735s] END\nI0223 21:14:25.013115 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:14:25.013175 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:14:25.013188 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:14:25.013372 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029e60230, {CONNECTING }\nI0223 21:14:25.023250 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029e60230, {READY }\nI0223 21:14:25.024274 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:14:26.927862 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:14:26.927905 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:14:26.927916 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:14:26.928180 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029988800, {CONNECTING }\nI0223 21:14:26.940078 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029988800, {READY }\nI0223 21:14:26.941511 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:14:28.288792 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:14:28.288892 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:14:28.289964 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:14:30.898402 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:14:30.898512 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:14:30.898531 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:14:30.898696 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc000a47a00, {CONNECTING }\nI0223 21:14:30.908226 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc000a47a00, {READY }\nI0223 21:14:30.909038 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:14:33.153433 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:14:33.153472 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:14:33.163325 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:14:33.163349 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 21:14:33.195417 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:14:33.195444 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:14:33.212732 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:14:33.212765 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 21:14:48.317662 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:14:48.317715 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:14:48.317767 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:14:48.318007 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc025a10540, {CONNECTING }\nI0223 21:14:48.328952 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc025a10540, {READY }\nI0223 21:14:48.330649 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:14:58.546480 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:14:58.546549 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:14:58.546593 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:14:58.546692 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0195f27e0, {CONNECTING }\nI0223 21:14:58.558690 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0195f27e0, {READY }\nI0223 21:14:58.560150 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:15:04.725081 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:15:04.725128 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:15:04.725144 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:15:04.725486 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0202f5a50, {CONNECTING }\nI0223 21:15:04.735176 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0202f5a50, {READY }\nI0223 21:15:04.736161 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:15:04.893053 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:15:04.893118 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:15:04.893138 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:15:04.893436 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021770010, {CONNECTING }\nI0223 21:15:04.903549 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021770010, {READY }\nI0223 21:15:04.904562 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:15:28.105084 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:15:28.105131 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:15:28.105144 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:15:28.105465 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016a7cdd0, {CONNECTING }\nI0223 21:15:28.117166 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016a7cdd0, {READY }\nI0223 21:15:28.118578 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:15:30.953389 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:15:30.953438 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:15:30.953449 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:15:30.953549 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc031608510, {CONNECTING }\nI0223 21:15:30.967940 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc031608510, {READY }\nI0223 21:15:30.969438 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:15:33.170122 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:15:33.170152 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:15:33.182563 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:15:33.182644 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 21:15:33.213078 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:15:33.213103 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:15:33.226881 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:15:33.226902 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 21:15:37.888689 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:15:37.889016 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:15:37.889163 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:15:37.889315 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0361edce0, {CONNECTING }\nI0223 21:15:37.903376 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0361edce0, {READY }\nI0223 21:15:37.905163 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:15:41.863473 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:15:41.863532 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:15:41.863551 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:15:41.863705 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f9714f0, {CONNECTING }\nI0223 21:15:41.873129 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02f9714f0, {READY }\nI0223 21:15:41.874011 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:16:00.155401 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:16:00.155460 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:16:00.155476 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:16:00.155603 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01595f550, {CONNECTING }\nI0223 21:16:00.171807 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01595f550, {READY }\nI0223 21:16:00.173268 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:16:06.113329 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 21:16:06.113691 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:16:06.114749 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:16:06.116000 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:16:10.792072 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:16:10.792167 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:16:10.792183 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:16:10.792561 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02dbc9b90, {CONNECTING }\nI0223 21:16:10.801726 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02dbc9b90, {READY }\nI0223 21:16:10.802731 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:16:13.268742 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:16:13.268798 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:16:13.268816 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:16:13.268969 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029753b60, {CONNECTING }\nI0223 21:16:13.282738 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc029753b60, {READY }\nI0223 21:16:13.284243 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:16:24.345492 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:16:24.345540 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:16:24.345555 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:16:24.346001 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0155cf090, {CONNECTING }\nI0223 21:16:24.357560 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0155cf090, {READY }\nI0223 21:16:24.358603 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:16:41.513081 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:16:41.513141 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:16:41.513159 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:16:41.513303 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02e997490, {CONNECTING }\nI0223 21:16:41.526139 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02e997490, {READY }\nI0223 21:16:41.529960 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:16:42.255137 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:16:42.255194 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:16:42.255210 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:16:42.255477 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02548a7b0, {CONNECTING }\nI0223 21:16:42.277548 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02548a7b0, {READY }\nI0223 21:16:42.279174 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:16:55.088645 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:16:55.088690 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:16:55.088706 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:16:55.088947 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0323bff20, {CONNECTING }\nI0223 21:16:55.102715 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0323bff20, {READY }\nI0223 21:16:55.104384 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:17:01.990796 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:17:01.990853 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:17:01.990869 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:17:01.991114 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc030399690, {CONNECTING }\nI0223 21:17:02.000919 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc030399690, {READY }\nI0223 21:17:02.001862 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:17:21.616370 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:17:21.616425 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:17:21.616440 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:17:21.616594 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0358bc270, {CONNECTING }\nI0223 21:17:21.625446 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0358bc270, {READY }\nI0223 21:17:21.626309 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:17:23.289063 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:17:23.289156 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:17:23.289170 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:17:23.289406 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02bda3b90, {CONNECTING }\nI0223 21:17:23.302721 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02bda3b90, {READY }\nI0223 21:17:23.303991 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:17:33.182392 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:17:33.182417 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:17:33.195199 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:17:33.195229 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 21:17:33.218321 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:17:33.218370 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:17:33.240534 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:17:33.240561 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 21:17:37.938137 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:17:37.938183 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:17:37.938195 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:17:37.938471 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ca91d70, {CONNECTING }\nI0223 21:17:37.950310 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01ca91d70, {READY }\nI0223 21:17:37.951811 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:17:46.522864 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:17:46.522952 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:17:46.522971 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:17:46.523162 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0273493e0, {CONNECTING }\nI0223 21:17:46.534185 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0273493e0, {READY }\nI0223 21:17:46.534956 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:17:53.896231 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:17:53.896277 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:17:53.896293 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:17:53.896407 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc012773650, {CONNECTING }\nI0223 21:17:53.909033 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc012773650, {READY }\nI0223 21:17:53.910891 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:18:02.935850 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:18:02.935909 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:18:02.937826 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:18:02.937965 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00ba3f810, {CONNECTING }\nI0223 21:18:02.949495 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc00ba3f810, {READY }\nI0223 21:18:02.950388 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:18:17.132409 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:18:17.132469 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:18:17.132486 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:18:17.132587 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028527870, {CONNECTING }\nI0223 21:18:17.145056 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc028527870, {READY }\nI0223 21:18:17.146195 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:18:18.919944 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:18:18.919991 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:18:18.920004 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:18:18.920121 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021bdde60, {CONNECTING }\nI0223 21:18:18.931320 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021bdde60, {READY }\nI0223 21:18:18.932740 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:18:32.827104 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:18:32.827201 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:18:32.827216 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:18:32.827438 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d223d00, {CONNECTING }\nI0223 21:18:32.841045 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d223d00, {READY }\nI0223 21:18:32.842596 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:18:43.266732 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:18:43.266775 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:18:43.266786 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:18:43.267121 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02e439410, {CONNECTING }\nI0223 21:18:43.276709 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02e439410, {READY }\nI0223 21:18:43.277658 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:18:57.657933 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:18:57.658019 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:18:57.658039 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:18:57.658259 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c53f290, {CONNECTING }\nI0223 21:18:57.668233 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01c53f290, {READY }\nI0223 21:18:57.669957 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:19:02.962684 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:19:02.962741 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:19:02.962758 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:19:02.962845 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015e35040, {CONNECTING }\nI0223 21:19:02.975890 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015e35040, {READY }\nI0223 21:19:02.977403 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:19:04.137279 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:19:04.137333 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:19:04.137350 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:19:04.137444 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015f997f0, {CONNECTING }\nI0223 21:19:04.149492 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015f997f0, {READY }\nI0223 21:19:04.150875 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:19:13.433053 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:19:13.433151 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:19:13.434297 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:19:18.153753 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:19:18.153794 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:19:18.153809 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:19:18.154047 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0156f35a0, {CONNECTING }\nI0223 21:19:18.163167 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0156f35a0, {READY }\nI0223 21:19:18.164138 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:19:28.203599 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:19:28.203660 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:19:28.203679 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:19:28.203887 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b2ef800, {CONNECTING }\nI0223 21:19:28.212877 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b2ef800, {READY }\nI0223 21:19:28.213726 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:19:33.174134 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:19:33.174307 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:19:33.191839 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:19:33.191868 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:19:33.202845 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:19:33.202875 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:19:33.214848 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:19:33.214876 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nI0223 21:19:35.487099 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:19:35.487155 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:19:35.487173 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:19:35.487364 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc035498530, {CONNECTING }\nI0223 21:19:35.500163 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc035498530, {READY }\nI0223 21:19:35.502348 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:19:38.734022 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:19:38.734071 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:19:38.734089 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:19:38.734357 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fad9800, {CONNECTING }\nI0223 21:19:38.745231 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02fad9800, {READY }\nI0223 21:19:38.746618 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:19:42.653870 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"context canceled"}\nE0223 21:19:42.654148 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:19:42.655044 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:19:42.656156 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:19:52.755682 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:19:52.755760 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:19:52.755774 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:19:52.756014 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0156478f0, {CONNECTING }\nI0223 21:19:52.765877 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0156478f0, {READY }\nI0223 21:19:52.766904 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:20:00.460287 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:20:00.460465 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:20:00.461413 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:20:04.040109 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:20:04.040162 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:20:04.040178 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:20:04.040674 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc032d94ea0, {CONNECTING }\nI0223 21:20:04.051167 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc032d94ea0, {READY }\nI0223 21:20:04.052201 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:20:10.177003 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:20:10.177055 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:20:10.177071 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:20:10.177321 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03506a060, {CONNECTING }\nI0223 21:20:10.198124 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03506a060, {READY }\nI0223 21:20:10.199382 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:20:11.893164 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:20:11.893220 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:20:11.893237 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:20:11.893472 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03508d8f0, {CONNECTING }\nI0223 21:20:11.906759 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03508d8f0, {READY }\nI0223 21:20:11.908109 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:20:24.258181 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:20:24.258232 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:20:24.258245 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:20:24.258339 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01cdf7940, {CONNECTING }\nI0223 21:20:24.270552 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01cdf7940, {READY }\nI0223 21:20:24.271774 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:20:33.191134 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:20:33.191165 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:20:33.201606 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:20:33.201631 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:20:33.210185 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:20:33.210206 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:20:33.233426 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:20:33.233459 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nI0223 21:20:41.669988 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:20:41.670053 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:20:41.670070 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:20:41.670229 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023898660, {CONNECTING }\nI0223 21:20:41.679695 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023898660, {READY }\nI0223 21:20:41.680821 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:20:43.728760 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:20:43.728816 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:20:43.728833 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:20:43.729086 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc022913ab0, {CONNECTING }\nI0223 21:20:43.741221 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc022913ab0, {READY }\nI0223 21:20:43.742709 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:20:44.950634 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:20:44.950690 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:20:44.950705 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:20:44.950832 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e9ee0a0, {CONNECTING }\nI0223 21:20:44.964342 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01e9ee0a0, {READY }\nI0223 21:20:44.967288 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:21:02.601661 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:21:02.601705 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:21:02.601721 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:21:02.601801 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b0785d0, {CONNECTING }\nI0223 21:21:02.611769 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b0785d0, {READY }\nI0223 21:21:02.612774 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:21:13.214291 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:21:13.214367 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:21:13.214384 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:21:13.214559 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02282d7d0, {CONNECTING }\nI0223 21:21:13.224600 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02282d7d0, {READY }\nI0223 21:21:13.225508 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:21:13.817284 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:21:13.817330 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:21:13.817346 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:21:13.817527 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023e3a3e0, {CONNECTING }\nI0223 21:21:13.831267 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023e3a3e0, {READY }\nI0223 21:21:13.832799 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:21:28.332771 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:21:28.332816 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:21:28.332827 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:21:28.332994 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014a6e550, {CONNECTING }\nI0223 21:21:28.343768 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc014a6e550, {READY }\nI0223 21:21:28.345225 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:21:42.235865 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:21:42.235945 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:21:42.235964 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:21:42.236181 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc019101370, {CONNECTING }\nI0223 21:21:42.245212 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc019101370, {READY }\nI0223 21:21:42.245962 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:21:43.241794 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:21:43.241839 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:21:43.241853 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:21:43.241948 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01916d240, {CONNECTING }\nI0223 21:21:43.253106 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01916d240, {READY }\nI0223 21:21:43.253997 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:21:47.689584 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 21:21:47.689692 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 21:21:47.690704 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 21:21:53.309086 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:21:53.309150 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:21:53.309167 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:21:53.309563 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01fcd22a0, {CONNECTING }\nI0223 21:21:53.325778 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01fcd22a0, {READY }\nI0223 21:21:53.332321 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:22:05.139333 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:22:05.139378 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:22:05.139393 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:22:05.139640 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d0e28c0, {CONNECTING }\nI0223 21:22:05.152428 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d0e28c0, {READY }\nI0223 21:22:05.154054 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:22:19.257899 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:22:19.258139 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:22:19.258244 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:22:19.258820 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0167adaa0, {CONNECTING }\nI0223 21:22:19.272289 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0167adaa0, {READY }\nI0223 21:22:19.273237 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:22:22.615347 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:22:22.615403 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:22:22.615422 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:22:22.615526 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02dc2d2d0, {CONNECTING }\nI0223 21:22:22.627406 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02dc2d2d0, {READY }\nI0223 21:22:22.628796 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 21:22:33.206358 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 21:22:33.206393 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 21:22:33.215881 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:22:33.215904 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:22:33.235721 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 21:22:33.235751 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 21:22:33.244813 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 21:22:33.244841 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nI0223 21:22:38.168683 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:22:38.168746 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:22:38.168804 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:22:38.168977 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016235960, {CONNECTING }\nI0223 21:22:38.182154 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016235960, {READY }\nI0223 21:22:38.183627 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:22:39.664918 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:22:39.664990 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:22:39.665007 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:22:39.665213 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015f77810, {CONNECTING }\nI0223 21:22:39.677648 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015f77810, {READY }\nI0223 21:22:39.679188 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:22:58.422128 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:22:58.422172 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:22:58.422187 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:22:58.422488 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc030c9e970, {CONNECTING }\nI0223 21:22:58.431488 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc030c9e970, {READY }\nI0223 21:22:58.432390 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:23:02.412858 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:23:02.412920 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:23:02.412955 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:23:02.413176 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02730aed0, {CONNECTING }\nI0223 21:23:02.421687 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02730aed0, {READY }\nI0223 21:23:02.422555 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:23:10.071750 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:23:10.071829 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:23:10.071849 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:23:10.072068 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d86f0f0, {CONNECTING }\nI0223 21:23:10.084804 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02d86f0f0, {READY }\nI0223 21:23:10.086746 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:23:20.907707 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:23:20.907757 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:23:20.907773 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:23:20.908070 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016d4a3a0, {CONNECTING }\nI0223 21:23:20.924282 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016d4a3a0, {READY }\nI0223 21:23:20.926408 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:23:33.814413 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:23:33.814470 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:23:33.814487 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:23:33.814861 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02789a9b0, {CONNECTING }\nI0223 21:23:33.824549 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02789a9b0, {READY }\nI0223 21:23:33.825668 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:23:34.329973 17 trace.go:205] Trace[1607892184]: "List etcd3" key:/operators.coreos.com/clusterserviceversions,resourceVersion:,resourceVersionMatch:,limit:250,continue: (23-Feb-2021 21:23:33.631) (total time: 697ms):\nTrace[1607892184]: [697.988093ms] [697.988093ms] END\nI0223 21:23:34.766777 17 trace.go:205] Trace[684229113]: "List" url:/apis/operators.coreos.com/v1alpha1/clusterserviceversions,user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36,client:::1 (23-Feb-2021 21:23:33.631) (total time: 1134ms):\nTrace[684229113]: ---"Listing from storage done" 698ms (21:23:00.330)\nTrace[684229113]: ---"Writing http response done" count:189 435ms (21:23:00.766)\nTrace[684229113]: [1.134924407s] [1.134924407s] END\nI0223 21:23:35.309761 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:23:35.309806 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:23:35.309821 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:23:35.310003 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02783ecd0, {CONNECTING }\nI0223 21:23:35.319717 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02783ecd0, {READY }\nI0223 21:23:35.320946 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:23:53.076921 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:23:53.077008 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 21:23:53.077058 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:23:53.077134 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc013f88e10, {CONNECTING }\nI0223 21:23:53.088701 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc013f88e10, {READY }\nI0223 21:23:53.090189 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:23:53.690778 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:23:53.690835 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 21:23:53.690851 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:23:53.691091 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc013c41190, {CONNECTING }\nI0223 21:23:53.703160 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc013c41190, {READY }\nI0223 21:23:53.704795 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:24:05.987748 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:24:05.987792 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 21:24:05.987807 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:24:05.988298 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b7cc240, {CONNECTING }\nI0223 21:24:06.000532 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b7cc240, {READY }\nI0223 21:24:06.001825 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 21:24:08.119533 17 client.go:360] parsed scheme: "passthrough"\nI0223 21:24:08.119577 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 21:24:08.119588 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 21:24:08.119668 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03ba3fd20, {CONNECTING }\nI0223 21:24:08.130093 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc03ba3fd20, {READY }\nI0223 21:24:08.132058 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"`, - data1: - 'Copying system trust bundle\nWaiting for port :6443 to be released.\nI0223 20:04:25.084507 1 loader.go:379] Config loaded from file: /etc/kubernetes/static-pod-resources/configmaps/kube-apiserver-cert-syncer-kubeconfig/kubeconfig\nCopying termination logs to "/var/log/kube-apiserver/termination.log"\nI0223 20:04:25.087543 1 main.go:124] Touching termination lock file "/var/log/kube-apiserver/.terminating"\nI0223 20:04:25.088797 1 main.go:182] Launching sub-process "/usr/bin/hyperkube kube-apiserver --openshift-config=/etc/kubernetes/static-pod-resources/configmaps/config/config.yaml --advertise-address=10.0.171.12 -v=2 --permit-address-sharing"\nFlag --openshift-config has been deprecated, to be removed\nI0223 20:04:25.238681 17 plugins.go:84] Registered admission plugin "authorization.openshift.io/RestrictSubjectBindings"\nI0223 20:04:25.238763 17 plugins.go:84] Registered admission plugin "image.openshift.io/ImagePolicy"\nI0223 20:04:25.238775 17 plugins.go:84] Registered admission plugin "route.openshift.io/IngressAdmission"\nI0223 20:04:25.238783 17 plugins.go:84] Registered admission plugin "scheduling.openshift.io/OriginPodNodeEnvironment"\nI0223 20:04:25.238792 17 plugins.go:84] Registered admission plugin "autoscaling.openshift.io/ClusterResourceOverride"\nI0223 20:04:25.238801 17 plugins.go:84] Registered admission plugin "quota.openshift.io/ClusterResourceQuota"\nI0223 20:04:25.238810 17 plugins.go:84] Registered admission plugin "autoscaling.openshift.io/RunOnceDuration"\nI0223 20:04:25.238819 17 plugins.go:84] Registered admission plugin "scheduling.openshift.io/PodNodeConstraints"\nI0223 20:04:25.238829 17 plugins.go:84] Registered admission plugin "security.openshift.io/SecurityContextConstraint"\nI0223 20:04:25.238838 17 plugins.go:84] Registered admission plugin "security.openshift.io/SCCExecRestrictions"\nI0223 20:04:25.238846 17 plugins.go:84] Registered admission plugin "network.openshift.io/ExternalIPRanger"\nI0223 20:04:25.238856 17 plugins.go:84] Registered admission plugin "network.openshift.io/RestrictedEndpointsAdmission"\nI0223 20:04:25.238873 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateAPIServer"\nI0223 20:04:25.238883 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateAuthentication"\nI0223 20:04:25.238892 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateFeatureGate"\nI0223 20:04:25.238952 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateConsole"\nI0223 20:04:25.238966 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateImage"\nI0223 20:04:25.238975 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateOAuth"\nI0223 20:04:25.238991 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateProject"\nI0223 20:04:25.239003 17 plugins.go:84] Registered admission plugin "config.openshift.io/DenyDeleteClusterConfiguration"\nI0223 20:04:25.239014 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateScheduler"\nI0223 20:04:25.239025 17 plugins.go:84] Registered admission plugin "quota.openshift.io/ValidateClusterResourceQuota"\nI0223 20:04:25.239035 17 plugins.go:84] Registered admission plugin "security.openshift.io/ValidateSecurityContextConstraints"\nI0223 20:04:25.239046 17 plugins.go:84] Registered admission plugin "authorization.openshift.io/ValidateRoleBindingRestriction"\nI0223 20:04:25.239056 17 plugins.go:84] Registered admission plugin "config.openshift.io/ValidateNetwork"\nI0223 20:04:25.239065 17 plugins.go:84] Registered admission plugin "security.openshift.io/DefaultSecurityContextConstraints"\nI0223 20:04:25.243294 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true]}\nI0223 20:04:25.243381 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true RotateKubeletServerCertificate:true]}\nW0223 20:04:25.243488 17 feature_gate.go:236] Setting GA feature gate SupportPodPidsLimit=true. It will be removed in a future release.\nI0223 20:04:25.243540 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true RotateKubeletServerCertificate:true SupportPodPidsLimit:true]}\nI0223 20:04:25.243629 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true NodeDisruptionExclusion:true RotateKubeletServerCertificate:true SupportPodPidsLimit:true]}\nI0223 20:04:25.243709 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true NodeDisruptionExclusion:true RotateKubeletServerCertificate:true ServiceNodeExclusion:true SupportPodPidsLimit:true]}\nW0223 20:04:25.243803 17 feature_gate.go:236] Setting GA feature gate SCTPSupport=true. It will be removed in a future release.\nI0223 20:04:25.243846 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true NodeDisruptionExclusion:true RotateKubeletServerCertificate:true SCTPSupport:true ServiceNodeExclusion:true SupportPodPidsLimit:true]}\nI0223 20:04:25.243962 17 feature_gate.go:244] feature gates: &{map[APIPriorityAndFairness:true LegacyNodeRoleBehavior:false NodeDisruptionExclusion:true RotateKubeletServerCertificate:true SCTPSupport:true ServiceNodeExclusion:true SupportPodPidsLimit:true]}\nFlag --openshift-config has been deprecated, to be removed\nFlag --enable-logs-handler has been deprecated, This flag will be removed in v1.19\nFlag --enable-swagger-ui has been deprecated, swagger 1.2 support has been removed\nFlag --insecure-port has been deprecated, This flag has no effect now and will be removed in v1.24.\nFlag --kubelet-https has been deprecated, API Server connections to kubelets always use https. This flag will be removed in 1.22.\nFlag --kubelet-read-only-port has been deprecated, kubelet-read-only-port is deprecated and will be removed.\nI0223 20:04:25.244167 17 flags.go:59] FLAG: --add-dir-header="false"\nI0223 20:04:25.244184 17 flags.go:59] FLAG: --address="127.0.0.1"\nI0223 20:04:25.244196 17 flags.go:59] FLAG: --admission-control="[]"\nI0223 20:04:25.244213 17 flags.go:59] FLAG: --admission-control-config-file="/tmp/kubeapiserver-admission-config.yaml487454417"\nI0223 20:04:25.244224 17 flags.go:59] FLAG: --advertise-address="10.0.171.12"\nI0223 20:04:25.244234 17 flags.go:59] FLAG: --allow-privileged="true"\nI0223 20:04:25.244251 17 flags.go:59] FLAG: --alsologtostderr="false"\nI0223 20:04:25.244261 17 flags.go:59] FLAG: --anonymous-auth="true"\nI0223 20:04:25.244302 17 flags.go:59] FLAG: --api-audiences="[https://kubernetes.default.svc]"\nI0223 20:04:25.244317 17 flags.go:59] FLAG: --apiserver-count="1"\nI0223 20:04:25.244327 17 flags.go:59] FLAG: --audit-log-batch-buffer-size="10000"\nI0223 20:04:25.244336 17 flags.go:59] FLAG: --audit-log-batch-max-size="1"\nI0223 20:04:25.244343 17 flags.go:59] FLAG: --audit-log-batch-max-wait="0s"\nI0223 20:04:25.244354 17 flags.go:59] FLAG: --audit-log-batch-throttle-burst="0"\nI0223 20:04:25.244362 17 flags.go:59] FLAG: --audit-log-batch-throttle-enable="false"\nI0223 20:04:25.244371 17 flags.go:59] FLAG: --audit-log-batch-throttle-qps="0"\nI0223 20:04:25.244382 17 flags.go:59] FLAG: --audit-log-compress="false"\nI0223 20:04:25.244390 17 flags.go:59] FLAG: --audit-log-format="json"\nI0223 20:04:25.244398 17 flags.go:59] FLAG: --audit-log-maxage="0"\nI0223 20:04:25.244407 17 flags.go:59] FLAG: --audit-log-maxbackup="10"\nI0223 20:04:25.244414 17 flags.go:59] FLAG: --audit-log-maxsize="100"\nI0223 20:04:25.244423 17 flags.go:59] FLAG: --audit-log-mode="blocking"\nI0223 20:04:25.244430 17 flags.go:59] FLAG: --audit-log-path="/var/log/kube-apiserver/audit.log"\nI0223 20:04:25.244438 17 flags.go:59] FLAG: --audit-log-truncate-enabled="false"\nI0223 20:04:25.244445 17 flags.go:59] FLAG: --audit-log-truncate-max-batch-size="10485760"\nI0223 20:04:25.244458 17 flags.go:59] FLAG: --audit-log-truncate-max-event-size="102400"\nI0223 20:04:25.244466 17 flags.go:59] FLAG: --audit-log-version="audit.k8s.io/v1"\nI0223 20:04:25.244475 17 flags.go:59] FLAG: --audit-policy-file="/etc/kubernetes/static-pod-resources/configmaps/kube-apiserver-audit-policies/default.yaml"\nI0223 20:04:25.244490 17 flags.go:59] FLAG: --audit-webhook-batch-buffer-size="10000"\nI0223 20:04:25.244499 17 flags.go:59] FLAG: --audit-webhook-batch-initial-backoff="10s"\nI0223 20:04:25.244509 17 flags.go:59] FLAG: --audit-webhook-batch-max-size="400"\nI0223 20:04:25.244518 17 flags.go:59] FLAG: --audit-webhook-batch-max-wait="30s"\nI0223 20:04:25.244526 17 flags.go:59] FLAG: --audit-webhook-batch-throttle-burst="15"\nI0223 20:04:25.244533 17 flags.go:59] FLAG: --audit-webhook-batch-throttle-enable="true"', - data2: - 'ERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.strategy.properties.rollingUpdate.properties.maxUnavailable has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.env.items..properties.valueFrom.properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.lifecycle.properties.postStart.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.lifecycle.properties.postStart.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.lifecycle.properties.preStop.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.lifecycle.properties.preStop.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.livenessProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.livenessProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.readinessProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.readinessProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.startupProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.containers.items..properties.startupProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.env.items..properties.valueFrom.properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.lifecycle.properties.postStart.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.lifecycle.properties.postStart.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.lifecycle.properties.preStop.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.lifecycle.properties.preStop.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.livenessProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.livenessProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.readinessProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.readinessProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.startupProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.ephemeralContainers.items..properties.startupProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.env.items..properties.valueFrom.properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.lifecycle.properties.postStart.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.lifecycle.properties.postStart.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.lifecycle.properties.preStop.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.lifecycle.properties.preStop.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.livenessProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.livenessProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.readinessProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.readinessProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.startupProbe.properties.httpGet.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.initContainers.items..properties.startupProbe.properties.tcpSocket.properties.port has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.overhead.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.volumes.items..properties.downwardAPI.properties.items.items..properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.volumes.items..properties.emptyDir.properties.sizeLimit has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.volumes.items..properties.ephemeral.properties.volumeClaimTemplate.properties.spec.properties.resources.properties.limits.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.volumes.items..properties.ephemeral.properties.volumeClaimTemplate.properties.spec.properties.resources.properties.requests.additionalProperties.schema has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.install.properties.spec.properties.deployments.items..properties.spec.properties.template.properties.spec.properties.volumes.items..properties.projected.properties.sources.items..properties.downwardAPI.properties.items.items..properties.resourceFieldRef.properties.divisor has invalid property: anyOf\nERROR $root.definitions.com.coreos.operators.v1alpha1.ClusterServiceVersion.properties.spec.properties.webhookdefinitions.items..properties.targetPort has invalid property: anyOf\nI0223 20:05:07.667701 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:07.667752 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:07.678136 17 store.go:1376] Monitoring clusterserviceversions.operators.coreos.com count at //operators.coreos.com/clusterserviceversions\nI0223 20:05:07.691254 17 aggregator.go:231] Updating OpenAPI spec because v1beta1.metrics.k8s.io is updated\nI0223 20:05:08.674654 17 trace.go:205] Trace[1868691782]: "List etcd3" key:/operators.coreos.com/clusterserviceversions,resourceVersion:,resourceVersionMatch:,limit:10000,continue: (23-Feb-2021 20:05:07.679) (total time: 995ms):\nTrace[1868691782]: [995.4145ms] [995.4145ms] END\nI0223 20:05:08.676188 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:08.679737 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.679784 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.698161 17 store.go:1376] Monitoring revisions.serving.knative.dev count at //serving.knative.dev/revisions\nI0223 20:05:08.724867 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:08.754671 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.754723 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.767631 17 store.go:1376] Monitoring subscriptions.messaging.knative.dev count at //messaging.knative.dev/subscriptions\nI0223 20:05:08.769534 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.769574 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.789584 17 store.go:1376] Monitoring subscriptions.messaging.knative.dev count at //messaging.knative.dev/subscriptions\nI0223 20:05:08.810383 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:08.870012 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.870070 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.884241 17 store.go:1376] Monitoring sinkbindings.sources.knative.dev count at //sources.knative.dev/sinkbindings\nI0223 20:05:08.888348 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.888560 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.893263 17 trace.go:205] Trace[779616982]: "Call conversion webhook" custom-resource-definition:subscriptions.messaging.knative.dev,desired-api-version:messaging.knative.dev/v1beta1,object-count:1,UID:dc30bc31-0391-49ed-8c76-86daaa780e14 (23-Feb-2021 20:05:08.794) (total time: 98ms):\nTrace[779616982]: ---"Request completed" 98ms (20:05:00.892)\nTrace[779616982]: [98.488399ms] [98.488399ms] END\nI0223 20:05:08.906377 17 store.go:1376] Monitoring sinkbindings.sources.knative.dev count at //sources.knative.dev/sinkbindings\nI0223 20:05:08.908020 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.908056 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.930733 17 store.go:1376] Monitoring sinkbindings.sources.knative.dev count at //sources.knative.dev/sinkbindings\nI0223 20:05:08.932408 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:08.932459 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:08.942661 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:08.946867 17 store.go:1376] Monitoring sinkbindings.sources.knative.dev count at //sources.knative.dev/sinkbindings\nI0223 20:05:08.976732 17 trace.go:205] Trace[417800427]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1alpha1,object-count:1,UID:4b5243e4-7878-436f-be04-be717cb0f5d2 (23-Feb-2021 20:05:08.902) (total time: 74ms):\nTrace[417800427]: ---"Request completed" 74ms (20:05:00.976)\nTrace[417800427]: [74.13198ms] [74.13198ms] END\nI0223 20:05:08.985668 17 trace.go:205] Trace[154168225]: "Call conversion webhook" custom-resource-definition:subscriptions.messaging.knative.dev,desired-api-version:messaging.knative.dev/v1beta1,object-count:1,UID:ae629e81-0e7d-48f1-acd0-a10d6cfbf71d (23-Feb-2021 20:05:08.894) (total time: 91ms):\nTrace[154168225]: ---"Request completed" 91ms (20:05:00.985)\nTrace[154168225]: [91.438968ms] [91.438968ms] END\nI0223 20:05:08.994436 17 trace.go:205] Trace[584246906]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1alpha2,object-count:1,UID:113685ab-0a01-4a89-a631-7df924e2a234 (23-Feb-2021 20:05:08.914) (total time: 79ms):\nTrace[584246906]: ---"Request completed" 79ms (20:05:00.994)\nTrace[584246906]: [79.431148ms] [79.431148ms] END\nI0223 20:05:09.018345 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:09.018401 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:09.031128 17 store.go:1376] Monitoring triggers.eventing.knative.dev count at //eventing.knative.dev/triggers\nI0223 20:05:09.032798 17 client.go:360] parsed scheme: "endpoint"\nI0223 20:05:09.032846 17 endpoint.go:68] ccResolverWrapper: sending new addresses to cc: [{https://10.0.137.156:2379 0 } {https://10.0.158.175:2379 0 } {https://10.0.171.12:2379 0 } {https://localhost:2379 0 }]\nI0223 20:05:09.051739 17 store.go:1376] Monitoring triggers.eventing.knative.dev count at //eventing.knative.dev/triggers\nI0223 20:05:09.061374 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:09.077620 17 trace.go:205] Trace[522766072]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1alpha2,object-count:1,UID:3f02b86e-279b-48f8-86c5-1f991d16c2bf (23-Feb-2021 20:05:08.995) (total time: 82ms):\nTrace[522766072]: ---"Request completed" 82ms (20:05:00.077)\nTrace[522766072]: [82.519697ms] [82.519697ms] END\nI0223 20:05:09.079213 17 trace.go:205] Trace[1177843340]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1alpha1,object-count:1,UID:03355f47-7e36-4c38-8fac-5d88274d53f2 (23-Feb-2021 20:05:08.993) (total time: 85ms):\nTrace[1177843340]: ---"Request completed" 85ms (20:05:00.079)\nTrace[1177843340]: [85.564957ms] [85.564957ms] END\nI0223 20:05:09.079479 17 trace.go:205] Trace[1358236459]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1,object-count:1,UID:014eb05c-1142-4ab5-9afb-821a9c656d20 (23-Feb-2021 20:05:08.993) (total time: 85ms):\nTrace[1358236459]: ---"Request completed" 85ms (20:05:00.079)\nTrace[1358236459]: [85.687911ms] [85.687911ms] END\nI0223 20:05:09.080737 17 trace.go:205] Trace[1389066300]: "Call conversion webhook" custom-resource-definition:subscriptions.messaging.knative.dev,desired-api-version:messaging.knative.dev/v1beta1,object-count:1,UID:b21ca313-1b4a-4860-ab13-c36b8ee2d75c (23-Feb-2021 20:05:08.986) (total time: 94ms):\nTrace[1389066300]: ---"Request completed" 94ms (20:05:00.080)\nTrace[1389066300]: [94.341421ms] [94.341421ms] END\nI0223 20:05:09.088080 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:09.176930 17 trace.go:205] Trace[499287539]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1,object-count:1,UID:d5cf8bb5-5d16-4497-8097-5809bd169e69 (23-Feb-2021 20:05:09.088) (total time: 87ms):\nTrace[499287539]: ---"Request completed" 87ms (20:05:00.176)\nTrace[499287539]: [87.977259ms] [87.977259ms] END\nI0223 20:05:09.178693 17 trace.go:205] Trace[632851168]: "Call conversion webhook" custom-resource-definition:triggers.eventing.knative.dev,desired-api-version:eventing.knative.dev/v1beta1,object-count:1,UID:ecd63ff4-facd-4a3c-b782-751b20615f5b (23-Feb-2021 20:05:09.085) (total time: 93ms):\nTrace[632851168]: ---"Request completed" 92ms (20:05:00.178)\nTrace[632851168]: [93.051535ms] [93.051535ms] END\nI0223 20:05:09.179793 17 trace.go:205] Trace[2084183409]: "Call conversion webhook" custom-resource-definition:subscriptions.messaging.knative.dev,desired-api-version:messaging.knative.dev/v1beta1,object-count:1,UID:d5ed3cee-18f2-4dd4-837e-46b164169981 (23-Feb-2021 20:05:09.087) (total time: 92ms):\nTrace[2084183409]: ---"Request completed" 92ms (20:05:00.179)\nTrace[2084183409]: [92.490416ms] [92.490416ms] END\nI0223 20:05:09.182656 17 cacher.go:405] cacher (*unstructured.Unstructured): initialized\nI0223 20:05:09.183483 17 trace.go:205] Trace[240293913]: "Call conversion webhook" custom-resource-definition:sinkbindings.sources.knative.dev,desired-api-version:sources.knative.dev/v1alpha2,object-count:1,UID:78ee597e-16c1-4a1c-98f2-c73004704dfa (23-Feb-2021 20:05:09.088) (total time: 95ms):\nTrace[240293913]: ---"Request completed" 95ms (20:05:00.183)\nTrace[240293913]: [95.411733ms] [95.411733ms] END', - data3: - 'I0223 20:39:09.342678 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:09.342725 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:39:09.342741 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:09.342948 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b047080, {CONNECTING }\nI0223 20:39:09.355135 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02b047080, {READY }\nI0223 20:39:09.356758 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:39:09.905720 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:09.905783 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:39:09.905801 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:09.905898 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01d3d8c00, {CONNECTING }\nI0223 20:39:09.921266 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc01d3d8c00, {READY }\nI0223 20:39:09.924744 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:39:17.533766 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:17.533829 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:39:17.533848 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:17.534106 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0126046c0, {CONNECTING }\nI0223 20:39:17.543548 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc0126046c0, {READY }\nI0223 20:39:17.544838 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:39:18.558397 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:18.558470 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:39:18.558488 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:18.558854 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc020159ca0, {CONNECTING }\nI0223 20:39:18.570488 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc020159ca0, {READY }\nI0223 20:39:18.571686 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:39:33.145599 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:39:33.145632 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:39:33.178176 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:39:33.178219 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:39:33.196678 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:39:33.196719 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:39:33.215606 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:39:33.215640 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:39:33.815455 17 cacher.go:782] cacher (*core.Pod): 1 objects queued in incoming channel.\nI0223 20:39:33.815486 17 cacher.go:782] cacher (*core.Pod): 2 objects queued in incoming channel.\nE0223 20:39:50.321232 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:39:50.321441 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:39:50.322557 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:39:52.263464 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:52.263552 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:39:52.263567 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:52.263655 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c6afc90, {CONNECTING }\nI0223 20:39:52.274876 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02c6afc90, {READY }\nI0223 20:39:52.275771 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:39:52.578122 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:52.578176 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:39:52.578193 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:52.578497 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02cf76750, {CONNECTING }\nI0223 20:39:52.591004 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02cf76750, {READY }\nI0223 20:39:52.592632 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:39:54.756286 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:54.756333 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:39:54.756344 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:54.756414 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023625960, {CONNECTING }\nI0223 20:39:54.767808 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc023625960, {READY }\nI0223 20:39:54.769129 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:39:56.404294 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:39:56.404345 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:39:56.404361 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:39:56.404481 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021f4dcb0, {CONNECTING }\nI0223 20:39:56.415138 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc021f4dcb0, {READY }\nI0223 20:39:56.416213 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:40:02.220022 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:40:02.220127 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:40:02.221866 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nI0223 20:40:25.339731 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:40:25.339789 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.158.175:2379 0 }] }\nI0223 20:40:25.339807 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:40:25.340129 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015a709b0, {CONNECTING }\nI0223 20:40:25.353181 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015a709b0, {READY }\nI0223 20:40:25.354655 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:40:30.462091 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:40:30.462135 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.171.12:2379 0 }] }\nI0223 20:40:30.462146 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:40:30.462230 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016332960, {CONNECTING }\nI0223 20:40:30.472773 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc016332960, {READY }\nI0223 20:40:30.474206 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:40:31.243026 17 writers.go:107] apiserver was unable to write a JSON response: http: Handler timeout\nE0223 20:40:31.243150 17 status.go:71] apiserver received an error that is not an metav1.Status: &errors.errorString{s:"http: Handler timeout"}\nE0223 20:40:31.244166 17 writers.go:120] apiserver was unable to write a fallback JSON response: http: Handler timeout\nE0223 20:40:33.150787 17 controller.go:116] loading OpenAPI spec for "v1.admission.work.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:40:33.150819 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.work.open-cluster-management.io: Rate Limited Requeue.\nE0223 20:40:33.190190 17 controller.go:116] loading OpenAPI spec for "v1beta1.webhook.certmanager.k8s.io" failed with: OpenAPI spec does not exist\nI0223 20:40:33.190224 17 controller.go:129] OpenAPI AggregationController: action for item v1beta1.webhook.certmanager.k8s.io: Rate Limited Requeue.\nE0223 20:40:33.201566 17 controller.go:116] loading OpenAPI spec for "v1.admission.hive.openshift.io" failed with: OpenAPI spec does not exist\nI0223 20:40:33.201592 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.hive.openshift.io: Rate Limited Requeue.\nE0223 20:40:33.221136 17 controller.go:116] loading OpenAPI spec for "v1.admission.cluster.open-cluster-management.io" failed with: OpenAPI spec does not exist\nI0223 20:40:33.221163 17 controller.go:129] OpenAPI AggregationController: action for item v1.admission.cluster.open-cluster-management.io: Rate Limited Requeue.\nI0223 20:40:36.603974 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:40:36.604027 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://localhost:2379 0 }] }\nI0223 20:40:36.604042 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:40:36.604223 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02aa90b70, {CONNECTING }\nI0223 20:40:36.613458 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc02aa90b70, {READY }\nI0223 20:40:36.614529 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nI0223 20:40:37.663227 17 client.go:360] parsed scheme: "passthrough"\nI0223 20:40:37.663281 17 passthrough.go:48] ccResolverWrapper: sending update to cc: {[{https://10.0.137.156:2379 0 }] }\nI0223 20:40:37.663296 17 clientconn.go:948] ClientConn switching balancer to "pick_first"\nI0223 20:40:37.663389 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015fa35a0, {CONNECTING }\nI0223 20:40:37.676172 17 balancer_conn_wrappers.go:78] pickfirstBalancer: HandleSubConnStateChange: 0xc015fa35a0, {READY }\nI0223 20:40:37.677917 17 controlbuf.go:508] transport: loopyWriter.run returning. connection error: desc = "transport is closing"\nE0223 20:40:40.123848 17 writers.go:64] error encountered while streaming results via websocket: context canceled\nI0223 20:40:40.123959 17 trace.go:205] Trace[1418061176]: "Get" url:/api/v1/namespaces/openshift-kube-apiserver/pods/kube-apiserver-ip-10-0-171-12.ec2.internal/log,user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36,client:76.182.85.204 (23-Feb-2021 20:13:49.846) (total time: 1610277ms):\nTrace[1418061176]: ---"Transformed response object" 1610268ms (20:40:00.123)\nTrace[1418061176]: [26m50.277491693s] [26m50.277491693s] END', - data4: `\x1b[4;1mRunning "clean:all" (clean) task\x1b[0m\n\x1b[32m>> \x1b[39m0 paths cleaned.\n\n\x1b[4;1mRunning "copy:base" (copy) task\x1b[0m\nCreated 188 directories, copied 1433 files\n\n\x1b[4;1mRunning "copy:app" (copy) task\x1b[0m\nCreated 40 directories, copied 233 files\n\n\x1b[4;1mRunning "processhtml:dist" (processhtml) task\x1b[0m\n\n\x1b[4;1mRunning "ngAnnotate:dist" (ngAnnotate) task\x1b[0m\n\x1b[32m>> \x1b[39m52 files successfully generated.\n\n\x1b[4;1mRunning "uglify:dist" (uglify) task\x1b[0m\n\x1b[32m>> \x1b[39m2 sourcemaps created.\n\x1b[32m>> \x1b[39m2 files created.\n\n\x1b[4;1mRunning "less:app" (less) task\x1b[0m\n\x1b[32mFile target/dist/css/alertEvents.css created\x1b[39m\n\x1b[32mFile target/dist/css/application.css created\x1b[39m\n\n\x1b[4;1mRunning "less:libs" (less) task\x1b[0m\n\x1b[31mCreate file target/dist/css/libs.css failed\x1b[39m` -}; diff --git a/packages/react-log-viewer/src/LogViewer/index.ts b/packages/react-log-viewer/src/LogViewer/index.ts deleted file mode 100644 index bf2d362499e..00000000000 --- a/packages/react-log-viewer/src/LogViewer/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './LogViewer'; -export * from './LogViewerContext'; -export * from './LogViewerSearch'; diff --git a/packages/react-log-viewer/src/LogViewer/utils/constants.ts b/packages/react-log-viewer/src/LogViewer/utils/constants.ts deleted file mode 100644 index a3427d476bb..00000000000 --- a/packages/react-log-viewer/src/LogViewer/utils/constants.ts +++ /dev/null @@ -1,8 +0,0 @@ -export const LOGGER_LINE_NUMBER_INDEX_DELTA: number = 1; -export const NUMBER_INDEX_DELTA: number = 1; -export const DEFAULT_AMOUNT: number = 0; -export const DEFAULT_INDEX: number = 0; -export const DEFAULT_MATCH: number = 0; -export const DEFAULT_FOCUS: number = -1; -export const MIN_SEARCH_INPUT_LENGTH: number = 3; -export const DEFAULT_SEARCH_INDEX = 0; diff --git a/packages/react-log-viewer/src/LogViewer/utils/utils.tsx b/packages/react-log-viewer/src/LogViewer/utils/utils.tsx deleted file mode 100644 index 3726cbb7a3f..00000000000 --- a/packages/react-log-viewer/src/LogViewer/utils/utils.tsx +++ /dev/null @@ -1,80 +0,0 @@ -export interface searchedKeyWordType { - rowIndex: number; - matchIndex: number; -} - -export const isArrayOfString = (array: string[]) => { - for (const str in array) { - if (typeof str !== 'string') { - return false; - } - } - return true; -}; - -/* - Function responsible for searching throughout logger component, need to setup for proper use anywhere. - It should take an array, and return an array of indexes where the searchedInput is found throughout the data array. - Should always be searching an array of strings. Look into lazy log for ideas. -*/ -export const searchForKeyword = (searchedInput: string, parsedData: string[], itemCount: number) => { - const searchResults: searchedKeyWordType[] = []; - - const regex = new RegExp(searchedInput, 'ig'); - parsedData.map((row, index) => { - const rawRow = stripAnsi(row); - if (regex.test(rawRow) && index < itemCount) { - const numMatches = rawRow.match(regex).length; - for (let i = 1; i <= numMatches; i++) { - searchResults.push({ rowIndex: index, matchIndex: i }); - } - } - }); - - if (searchResults.length > 0) { - return [...searchResults]; - } else if (searchResults.length <= 0) { - return [{ rowIndex: -1, matchIndex: 0 }]; - } -}; - -export const parseConsoleOutput = (data: string[] | string) => { - const stringToSplitWith = '\n'; - const parsedData = Array.isArray(data) ? data.join(stringToSplitWith) : data; - const stringSplitting = parsedData.toString(); - const cleanString = stringSplitting.split(stringToSplitWith); - - return cleanString; -}; - -export const escapeString = (inputString: string): string => inputString.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); // eslint-disable-line - -/* eslint-disable-next-line no-control-regex */ -const ansiRegexString = `[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]`; - -export const ansiRegex = new RegExp(ansiRegexString, 'g'); - -export const isAnsi = (inputString: string) => inputString.match(ansiRegex); - -export const stripAnsi = (inputString: string): string => inputString.replace(ansiRegex, ''); - -export const splitAnsi = (inputString: string): string[] => inputString.split(new RegExp(`(${ansiRegexString})`, 'g')); - -export const escapeTextForHtml = (inputString: string): string => - inputString.replace(/[&<>"']/gm, str => { - if (str === '&') { - return '&'; - } - if (str === '<') { - return '<'; - } - if (str === '>') { - return '>'; - } - if (str === '"') { - return '"'; - } - if (str === "'") { - return '''; - } - }); diff --git a/packages/react-log-viewer/src/ansi_up/ansi_up.ts b/packages/react-log-viewer/src/ansi_up/ansi_up.ts deleted file mode 100644 index bbfc8564425..00000000000 --- a/packages/react-log-viewer/src/ansi_up/ansi_up.ts +++ /dev/null @@ -1,728 +0,0 @@ -/* ansi_up.js - * author : Dru Nelson - * license : MIT - * http://github.com/drudru/ansi_up - */ - -// -// INTERFACES -// -/* eslint-disable */ -interface AU_Color { - rgb: number[]; - class_name: string; -} - -// Represents the output of process_ansi(): a snapshot of the AnsiUp state machine -// at a given point in time, which wraps a fragment of text. This would allow deferred -// processing of text fragments and colors, if ever needed. -interface TextWithAttr { - fg: AU_Color; - bg: AU_Color; - bold: boolean; - italic: boolean; - underline: boolean; - text: string; -} - -// Used internally when breaking up the raw text into packets - -enum PacketKind { - EOS, - Text, - Incomplete, // An Incomplete ESC sequence - ESC, // A single ESC char - random - Unknown, // A valid CSI but not an SGR code - SGR, // Select Graphic Rendition - OSCURL // Operating System Command -} - -interface TextPacket { - kind: PacketKind; - text: string; - url: string; -} - -// -// MAIN CLASS -// - -export default class AnsiUp { - VERSION = '5.0.1'; - - // - // *** SEE README ON GITHUB FOR PUBLIC API *** - // - - // 256 Colors Palette - // CSS RGB strings - ex. "255, 255, 255" - private ansi_colors: AU_Color[][]; - private palette_256: AU_Color[]; - - private fg: AU_Color; - private bg: AU_Color; - private bold: boolean; - private italic: boolean; - private underline: boolean; - private _use_classes: boolean; - - private _csi_regex: RegExp; - - private _osc_st: RegExp; - private _osc_regex: RegExp; - - private _url_whitelist: any = {}; - - private _buffer: string; - - constructor() { - // All construction occurs here - this.setup_palettes(); - this.resetStyles(); - } - - set use_classes(arg: boolean) { - this._use_classes = arg; - } - - get use_classes(): boolean { - return this._use_classes; - } - - set url_whitelist(arg: {}) { - this._url_whitelist = arg; - } - - get url_whitelist(): {} { - return this._url_whitelist; - } - - private setup_palettes(): void { - this.ansi_colors = [ - // Normal colors - [ - { rgb: [0, 0, 0], class_name: 'ansi-black' }, - { rgb: [187, 0, 0], class_name: 'ansi-red' }, - { rgb: [0, 187, 0], class_name: 'ansi-green' }, - { rgb: [187, 187, 0], class_name: 'ansi-yellow' }, - { rgb: [0, 0, 187], class_name: 'ansi-blue' }, - { rgb: [187, 0, 187], class_name: 'ansi-magenta' }, - { rgb: [0, 187, 187], class_name: 'ansi-cyan' }, - { rgb: [255, 255, 255], class_name: 'ansi-white' } - ], - - // Bright colors - [ - { rgb: [85, 85, 85], class_name: 'ansi-bright-black' }, - { rgb: [255, 85, 85], class_name: 'ansi-bright-red' }, - { rgb: [0, 255, 0], class_name: 'ansi-bright-green' }, - { rgb: [255, 255, 85], class_name: 'ansi-bright-yellow' }, - { rgb: [85, 85, 255], class_name: 'ansi-bright-blue' }, - { rgb: [255, 85, 255], class_name: 'ansi-bright-magenta' }, - { rgb: [85, 255, 255], class_name: 'ansi-bright-cyan' }, - { rgb: [255, 255, 255], class_name: 'ansi-bright-white' } - ] - ]; - - this.palette_256 = []; - - // Index 0..15 : Ansi-Colors - this.ansi_colors.forEach(palette => { - palette.forEach(rec => { - this.palette_256.push(rec); - }); - }); - - // Index 16..231 : RGB 6x6x6 - // https://gist.github.com/jasonm23/2868981#file-xterm-256color-yaml - const levels = [0, 95, 135, 175, 215, 255]; - for (let r = 0; r < 6; ++r) { - for (let g = 0; g < 6; ++g) { - for (let b = 0; b < 6; ++b) { - const col = { rgb: [levels[r], levels[g], levels[b]], class_name: 'truecolor' }; - this.palette_256.push(col); - } - } - } - - // Index 232..255 : Grayscale - let grey_level = 8; - for (let i = 0; i < 24; ++i, grey_level += 10) { - const gry = { rgb: [grey_level, grey_level, grey_level], class_name: 'truecolor' }; - this.palette_256.push(gry); - } - } - - private escape_txt_for_html(txt: string): string { - return txt.replace(/[&<>"']/gm, str => { - if (str === '&') { - return '&'; - } - if (str === '<') { - return '<'; - } - if (str === '>') { - return '>'; - } - if (str === '"') { - return '"'; - } - if (str === "'") { - return '''; - } - }); - } - - private append_buffer(txt: string) { - const str = this._buffer + txt; - this._buffer = str; - } - - private get_next_packet(): TextPacket { - const pkt = { - kind: PacketKind.EOS, - text: '', - url: '' - }; - - const len = this._buffer.length; - if (len == 0) { - return pkt; - } - - const pos = this._buffer.indexOf('\x1B'); - - // The most common case, no ESC codes - if (pos == -1) { - pkt.kind = PacketKind.Text; - pkt.text = this._buffer; - this._buffer = ''; - return pkt; - } - - if (pos > 0) { - pkt.kind = PacketKind.Text; - pkt.text = this._buffer.slice(0, pos); - this._buffer = this._buffer.slice(pos); - return pkt; - } - - // NOW WE HANDLE ESCAPES - if (pos == 0) { - if (len == 1) { - // Lone ESC in Buffer, We don't know yet - pkt.kind = PacketKind.Incomplete; - return pkt; - } - - const next_char = this._buffer.charAt(1); - - // We treat this as a single ESC - // Which effecitvely shows - if (next_char != '[' && next_char != ']') { - // DeMorgan - pkt.kind = PacketKind.ESC; - pkt.text = this._buffer.slice(0, 1); - this._buffer = this._buffer.slice(1); - return pkt; - } - - // OK is this an SGR or OSC that we handle - - // SGR CHECK - if (next_char == '[') { - // We do this regex initialization here so - // we can keep the regex close to its use (Readability) - - // All ansi codes are typically in the following format. - // We parse it and focus specifically on the - // graphics commands (SGR) - // - // CONTROL-SEQUENCE-INTRODUCER CSI (ESC, '[') - // PRIVATE-MODE-CHAR (!, <, >, ?) - // Numeric parameters separated by semicolons ('0' - '9', ';') - // Intermediate-modifiers (0x20 - 0x2f) - // COMMAND-CHAR (0x40 - 0x7e) - // - - if (!this._csi_regex) { - this._csi_regex = rgx` - ^ # beginning of line - # - # First attempt - (?: # legal sequence - \x1b\[ # CSI - ([\x3c-\x3f]?) # private-mode char - ([\d;]*) # any digits or semicolons - ([\x20-\x2f]? # an intermediate modifier - [\x40-\x7e]) # the command - ) - | # alternate (second attempt) - (?: # illegal sequence - \x1b\[ # CSI - [\x20-\x7e]* # anything legal - ([\x00-\x1f:]) # anything illegal - ) - `; - } - - const match = this._buffer.match(this._csi_regex); - - // This match is guaranteed to terminate (even on - // invalid input). The key is to match on legal and - // illegal sequences. - // The first alternate matches everything legal and - // the second matches everything illegal. - // - // If it doesn't match, then we have not received - // either the full sequence or an illegal sequence. - // If it does match, the presence of field 4 tells - // us whether it was legal or illegal. - - if (match === null) { - pkt.kind = PacketKind.Incomplete; - return pkt; - } - - // match is an array - // 0 - total match - // 1 - private mode chars group - // 2 - digits and semicolons group - // 3 - command - // 4 - illegal char - - if (match[4]) { - // Illegal sequence, just remove the ESC - pkt.kind = PacketKind.ESC; - pkt.text = this._buffer.slice(0, 1); - this._buffer = this._buffer.slice(1); - return pkt; - } - - // If not a valid SGR, we don't handle - if (match[1] != '' || match[3] != 'm') { - pkt.kind = PacketKind.Unknown; - } else { - pkt.kind = PacketKind.SGR; - } - - pkt.text = match[2]; // Just the parameters - - var rpos = match[0].length; - this._buffer = this._buffer.slice(rpos); - return pkt; - } - - // OSC CHECK - if (next_char == ']') { - if (len < 4) { - pkt.kind = PacketKind.Incomplete; - return pkt; - } - - if (this._buffer.charAt(2) != '8' || this._buffer.charAt(3) != ';') { - // This is not a match, so we'll just treat it as ESC - pkt.kind = PacketKind.ESC; - pkt.text = this._buffer.slice(0, 1); - this._buffer = this._buffer.slice(1); - return pkt; - } - - // We do this regex initialization here so - // we can keep the regex close to its use (Readability) - - // Matching a Hyperlink OSC with a regex is difficult - // because Javascript's regex engine doesn't support - // 'partial match' support. - // - // Therefore, we require the system to match the - // string-terminator(ST) before attempting a match. - // Once we find it, we attempt the Hyperlink-Begin - // match. - // If that goes ok, we scan forward for the next - // ST. - // Finally, we try to match it all and return - // the sequence. - // Also, it is important to note that we consider - // certain control characters as an invalidation of - // the entire sequence. - - // We do regex initializations here so - // we can keep the regex close to its use (Readability) - - // STRING-TERMINATOR - // This is likely to terminate in most scenarios - // because it will terminate on a newline - - if (!this._osc_st) { - this._osc_st = rgxG` - (?: # legal sequence - (\x1b\\) # ESC \ - | # alternate - (\x07) # BEL (what xterm did) - ) - | # alternate (second attempt) - ( # illegal sequence - [\x00-\x06] # anything illegal - | # alternate - [\x08-\x1a] # anything illegal - | # alternate - [\x1c-\x1f] # anything illegal - ) - `; - } - - // VERY IMPORTANT - // We do a stateful regex match with exec. - // If the regex is global, and it used with 'exec', - // then it will search starting at the 'lastIndex' - // If it matches, the regex can be used again to - // find the next match. - this._osc_st.lastIndex = 0; - - { - const match = this._osc_st.exec(this._buffer); - - if (match === null) { - pkt.kind = PacketKind.Incomplete; - return pkt; - } - - // If an illegal character was found, bail on the match - if (match[3]) { - // Illegal sequence, just remove the ESC - pkt.kind = PacketKind.ESC; - pkt.text = this._buffer.slice(0, 1); - this._buffer = this._buffer.slice(1); - return pkt; - } - } - - // OK - we might have the prefix and URI - // Lets start our search for the next ST - // past this index - - { - const match = this._osc_st.exec(this._buffer); - - if (match === null) { - pkt.kind = PacketKind.Incomplete; - return pkt; - } - - // If an illegal character was found, bail on the match - if (match[3]) { - // Illegal sequence, just remove the ESC - pkt.kind = PacketKind.ESC; - pkt.text = this._buffer.slice(0, 1); - this._buffer = this._buffer.slice(1); - return pkt; - } - } - - // OK, at this point we should have a FULL match! - // - // Lets try to match that now - - if (!this._osc_regex) { - this._osc_regex = rgx` - ^ # beginning of line - # - \x1b\]8; # OSC Hyperlink - [\x20-\x3a\x3c-\x7e]* # params (excluding ;) - ; # end of params - ([\x21-\x7e]{0,512}) # URL capture - (?: # ST - (?:\x1b\\) # ESC \ - | # alternate - (?:\x07) # BEL (what xterm did) - ) - ([\x20-\x7e]+) # TEXT capture - \x1b\]8;; # OSC Hyperlink End - (?: # ST - (?:\x1b\\) # ESC \ - | # alternate - (?:\x07) # BEL (what xterm did) - ) - `; - } - - const match = this._buffer.match(this._osc_regex); - - if (match === null) { - // Illegal sequence, just remove the ESC - pkt.kind = PacketKind.ESC; - pkt.text = this._buffer.slice(0, 1); - this._buffer = this._buffer.slice(1); - return pkt; - } - - // match is an array - // 0 - total match - // 1 - URL - // 2 - Text - - // If a valid SGR - pkt.kind = PacketKind.OSCURL; - pkt.url = match[1]; - pkt.text = match[2]; - - var rpos = match[0].length; - this._buffer = this._buffer.slice(rpos); - return pkt; - } - } - } - - ansi_to_html(txt: string): string { - this.append_buffer(txt); - - const blocks: string[] = []; - - while (true) { - const packet = this.get_next_packet(); - - if (packet.kind == PacketKind.EOS || packet.kind == PacketKind.Incomplete) { - break; - } - - // Drop single ESC or Unknown CSI - if (packet.kind == PacketKind.ESC || packet.kind == PacketKind.Unknown) { - continue; - } - - if (packet.kind == PacketKind.Text) { - blocks.push(this.transform_to_html(this.with_state(packet))); - } else if (packet.kind == PacketKind.SGR) { - this.process_ansi(packet); - } else if (packet.kind == PacketKind.OSCURL) { - blocks.push(this.process_hyperlink(packet)); - } - } - - return blocks.join(''); - } - - resetStyles() { - this._use_classes = false; - - this.bold = false; - this.italic = false; - this.underline = false; - this.fg = this.bg = null; - - this._buffer = ''; - - this._url_whitelist = { http: 1, https: 1 }; - } - - private with_state(pkt: TextPacket): TextWithAttr { - return { - bold: this.bold, - italic: this.italic, - underline: this.underline, - fg: this.fg, - bg: this.bg, - text: pkt.text - }; - } - - private process_ansi(pkt: TextPacket) { - // Ok - we have a valid "SGR" (Select Graphic Rendition) - - const sgr_cmds = pkt.text.split(';'); - - // Each of these params affects the SGR state - - // Why do we shift through the array instead of a forEach?? - // ... because some commands consume the params that follow ! - while (sgr_cmds.length > 0) { - const sgr_cmd_str = sgr_cmds.shift(); - const num = parseInt(sgr_cmd_str, 10); - - if (isNaN(num) || num === 0) { - this.fg = this.bg = null; - this.bold = false; - this.italic = false; - this.underline = false; - } else if (num === 1) { - this.bold = true; - } else if (num === 3) { - this.italic = true; - } else if (num === 4) { - this.underline = true; - } else if (num === 22) { - this.bold = false; - } else if (num === 23) { - this.italic = false; - } else if (num === 24) { - this.underline = false; - } else if (num === 39) { - this.fg = null; - } else if (num === 49) { - this.bg = null; - } else if (num >= 30 && num < 38) { - this.fg = this.ansi_colors[0][num - 30]; - } else if (num >= 40 && num < 48) { - this.bg = this.ansi_colors[0][num - 40]; - } else if (num >= 90 && num < 98) { - this.fg = this.ansi_colors[1][num - 90]; - } else if (num >= 100 && num < 108) { - this.bg = this.ansi_colors[1][num - 100]; - } else if (num === 38 || num === 48) { - // extended set foreground/background color - - // validate that param exists - if (sgr_cmds.length > 0) { - // extend color (38=fg, 48=bg) - const is_foreground = num === 38; - - const mode_cmd = sgr_cmds.shift(); - - // MODE '5' - 256 color palette - if (mode_cmd === '5' && sgr_cmds.length > 0) { - const palette_index = parseInt(sgr_cmds.shift(), 10); - if (palette_index >= 0 && palette_index <= 255) { - if (is_foreground) { - this.fg = this.palette_256[palette_index]; - } else { - this.bg = this.palette_256[palette_index]; - } - } - } - - // MODE '2' - True Color - if (mode_cmd === '2' && sgr_cmds.length > 2) { - const r = parseInt(sgr_cmds.shift(), 10); - const g = parseInt(sgr_cmds.shift(), 10); - const b = parseInt(sgr_cmds.shift(), 10); - - if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) { - const c = { rgb: [r, g, b], class_name: 'truecolor' }; - if (is_foreground) { - this.fg = c; - } else { - this.bg = c; - } - } - } - } - } - } - } - - private transform_to_html(fragment: TextWithAttr): string { - const txt = fragment.text; - - if (txt.length === 0) { - return txt; - } - - // txt = this.escape_txt_for_html(txt); - - // If colors not set, default style is used - if (!fragment.bold && !fragment.italic && !fragment.underline && fragment.fg === null && fragment.bg === null) { - return txt; - } - - const styles: string[] = []; - const classes: string[] = []; - - const fg = fragment.fg; - const bg = fragment.bg; - - // Note on bold: https://stackoverflow.com/questions/6737005/what-are-some-advantages-to-using-span-style-font-weightbold-rather-than-b?rq=1 - if (fragment.bold) { - styles.push('font-weight:bold'); - } - - if (fragment.italic) { - styles.push('font-style:italic'); - } - - if (fragment.underline) { - styles.push('text-decoration:underline'); - } - - if (!this._use_classes) { - // USE INLINE STYLES - if (fg) { - styles.push(`color:rgb(${fg.rgb.join(',')})`); - } - if (bg) { - styles.push(`background-color:rgb(${bg.rgb})`); - } - } else { - // USE CLASSES - if (fg) { - if (fg.class_name !== 'truecolor') { - classes.push(`${fg.class_name}-fg`); - } else { - styles.push(`color:rgb(${fg.rgb.join(',')})`); - } - } - if (bg) { - if (bg.class_name !== 'truecolor') { - classes.push(`${bg.class_name}-bg`); - } else { - styles.push(`background-color:rgb(${bg.rgb.join(',')})`); - } - } - } - - let class_string = ''; - let style_string = ''; - - if (classes.length) { - class_string = ` class="${classes.join(' ')}"`; - } - - if (styles.length) { - style_string = ` style="${styles.join(';')}"`; - } - - return `${txt}`; - } - - private process_hyperlink(pkt: TextPacket): string { - // Check URL scheme - const parts = pkt.url.split(':'); - if (parts.length < 1) { - return ''; - } - - if (!this._url_whitelist[parts[0]]) { - return ''; - } - - const result = `${this.escape_txt_for_html(pkt.text)}`; - return result; - } -} - -// -// PRIVATE FUNCTIONS -// - -// ES5 template string transformer -function rgx(tmplObj: any, ...subst: any) { - // Use the 'raw' value so we don't have to double backslash in a template string - const regexText: string = tmplObj.raw[0]; - - // Remove white-space and comments - const wsrgx = /^\s+|\s+\n|\s*#[\s\S]*?\n|\n/gm; - const txt2 = regexText.replace(wsrgx, ''); - return new RegExp(txt2); -} - -// ES5 template string transformer -// Multi-Line On -function rgxG(tmplObj: any, ...subst: any) { - // Use the 'raw' value so we don't have to double backslash in a template string - const regexText: string = tmplObj.raw[0]; - - // Remove white-space and comments - const wsrgx = /^\s+|\s+\n|\s*#[\s\S]*?\n|\n/gm; - const txt2 = regexText.replace(wsrgx, ''); - return new RegExp(txt2, 'g'); -} diff --git a/packages/react-log-viewer/src/index.ts b/packages/react-log-viewer/src/index.ts deleted file mode 100644 index b08400c849f..00000000000 --- a/packages/react-log-viewer/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './LogViewer'; diff --git a/packages/react-log-viewer/src/react-window/VariableSizeList.tsx b/packages/react-log-viewer/src/react-window/VariableSizeList.tsx deleted file mode 100644 index 251b8244d02..00000000000 --- a/packages/react-log-viewer/src/react-window/VariableSizeList.tsx +++ /dev/null @@ -1,244 +0,0 @@ -import createListComponent from './createListComponent'; - -import { ScrollToAlign, ListProps, InstanceProps, ItemMetadata } from './createListComponent'; - -const DEFAULT_ESTIMATED_ITEM_SIZE = 50; - -const getItemMetadata = (props: ListProps, index: number, instanceProps: InstanceProps): ItemMetadata => { - const { itemSize } = props; - const { itemMetadataMap, lastMeasuredIndex } = instanceProps; - - if (index > lastMeasuredIndex) { - let offset = 0; - if (lastMeasuredIndex >= 0) { - const itemMetadata = itemMetadataMap[lastMeasuredIndex]; - offset = itemMetadata.offset + itemMetadata.size; - } - - for (let i = lastMeasuredIndex + 1; i <= index; i++) { - const size = typeof itemSize === 'number' ? itemSize : itemSize(i); - - itemMetadataMap[i] = { - offset, - size - }; - - offset += size; - } - - instanceProps.lastMeasuredIndex = index; - } - - return itemMetadataMap[index]; -}; - -const findNearestItem = (props: ListProps, instanceProps: InstanceProps, offset: number) => { - const { itemMetadataMap, lastMeasuredIndex } = instanceProps; - - const lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0; - - if (lastMeasuredItemOffset >= offset) { - // If we've already measured items within this range just use a binary search as it's faster. - return findNearestItemBinarySearch(props, instanceProps, lastMeasuredIndex, 0, offset); - } else { - // If we haven't yet measured this high, fallback to an exponential search with an inner binary search. - // The exponential search avoids pre-computing sizes for the full set of items as a binary search would. - // The overall complexity for this approach is O(log n). - return findNearestItemExponentialSearch(props, instanceProps, Math.max(0, lastMeasuredIndex), offset); - } -}; - -const findNearestItemBinarySearch = ( - props: ListProps, - instanceProps: InstanceProps, - high: number, - low: number, - offset: number -): number => { - while (low <= high) { - const middle = low + Math.floor((high - low) / 2); - const currentOffset = getItemMetadata(props, middle, instanceProps).offset; - - if (currentOffset === offset) { - return middle; - } else if (currentOffset < offset) { - low = middle + 1; - } else if (currentOffset > offset) { - high = middle - 1; - } - } - - if (low > 0) { - return low - 1; - } else { - return 0; - } -}; - -const findNearestItemExponentialSearch = ( - props: ListProps, - instanceProps: InstanceProps, - index: number, - offset: number -): number => { - const { itemCount } = props; - let interval = 1; - - while (index < itemCount && getItemMetadata(props, index, instanceProps).offset < offset) { - index += interval; - interval *= 2; - } - - return findNearestItemBinarySearch( - props, - instanceProps, - Math.min(index, itemCount - 1), - Math.floor(index / 2), - offset - ); -}; - -const getEstimatedTotalSize = ( - { itemCount }: ListProps, - { itemMetadataMap, estimatedItemSize, lastMeasuredIndex }: InstanceProps -) => { - let totalSizeOfMeasuredItems = 0; - - // Edge case check for when the number of items decreases while a scroll is in progress. - // https://github.com/bvaughn/react-window/pull/138 - if (lastMeasuredIndex >= itemCount) { - lastMeasuredIndex = itemCount - 1; - } - - if (lastMeasuredIndex >= 0) { - const itemMetadata = itemMetadataMap[lastMeasuredIndex]; - totalSizeOfMeasuredItems = itemMetadata.offset + itemMetadata.size; - } - - const numUnmeasuredItems = itemCount - lastMeasuredIndex - 1; - const totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize; - - return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems; -}; - -export const VariableSizeList = createListComponent({ - getItemOffset: (props: ListProps, index: number, instanceProps: InstanceProps): number => - getItemMetadata(props, index, instanceProps).offset, - - getItemSize: (props: ListProps, index: number, instanceProps: InstanceProps): number => - instanceProps.itemMetadataMap[index].size, - - getEstimatedTotalSize, - - getOffsetForIndexAndAlignment: ( - props: ListProps, - index: number, - align: ScrollToAlign, - scrollOffset: number, - instanceProps: InstanceProps - ): number => { - const { height } = props; - - const size = height; - const itemMetadata = getItemMetadata(props, index, instanceProps); - - // Get estimated total size after ItemMetadata is computed, - // To ensure it reflects actual measurements instead of just estimates. - const estimatedTotalSize = getEstimatedTotalSize(props, instanceProps); - - const maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset)); - const minOffset = Math.max(0, itemMetadata.offset - size + itemMetadata.size); - - if (align === 'smart') { - if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) { - align = 'auto'; - } else { - align = 'center'; - } - } - - switch (align) { - case 'start': - return maxOffset; - case 'end': - return minOffset; - case 'center': - return Math.round(minOffset + (maxOffset - minOffset) / 2); - case 'auto': - default: - if (scrollOffset >= minOffset && scrollOffset <= maxOffset) { - return scrollOffset; - } else if (scrollOffset < minOffset) { - return minOffset; - } else { - return maxOffset; - } - } - }, - - getStartIndexForOffset: (props: ListProps, offset: number, instanceProps: InstanceProps): number => - findNearestItem(props, instanceProps, offset), - - getStopIndexForStartIndex: ( - props: ListProps, - startIndex: number, - scrollOffset: number, - instanceProps: InstanceProps - ): number => { - const { height, itemCount } = props; - - const size = height; - const itemMetadata = getItemMetadata(props, startIndex, instanceProps); - const maxOffset = scrollOffset + size; - - let offset = itemMetadata.offset + itemMetadata.size; - let stopIndex = startIndex; - - while (stopIndex < itemCount - 1 && offset < maxOffset) { - stopIndex++; - offset += getItemMetadata(props, stopIndex, instanceProps).size; - } - - return stopIndex; - }, - - initInstanceProps(props: ListProps, instance: any): InstanceProps { - const { estimatedItemSize } = props; - - const instanceProps = { - itemMetadataMap: {}, - estimatedItemSize: estimatedItemSize || DEFAULT_ESTIMATED_ITEM_SIZE, - lastMeasuredIndex: -1 - }; - - instance.resetAfterIndex = (index: number, shouldForceUpdate: boolean = true) => { - instanceProps.lastMeasuredIndex = Math.min(instanceProps.lastMeasuredIndex, index - 1); - - // We could potentially optimize further by only evicting styles after this index, - // But since styles are only cached while scrolling is in progress- - // It seems an unnecessary optimization. - // It's unlikely that resetAfterIndex() will be called while a user is scrolling. - instance._getItemStyleCache(-1); - - if (shouldForceUpdate) { - instance.forceUpdate(); - } - }; - - return instanceProps; - }, - - shouldResetStyleCacheOnItemSizeChange: false, - - validateProps: ({ itemSize }: ListProps) => { - if (process.env.NODE_ENV !== 'production') { - if (typeof itemSize !== 'function') { - throw Error( - 'An invalid "itemSize" prop has been specified. ' + - 'Value should be a function. ' + - `"${itemSize === null ? 'null' : typeof itemSize}" was specified.` - ); - } - } - } -}); diff --git a/packages/react-log-viewer/src/react-window/areEqual.ts b/packages/react-log-viewer/src/react-window/areEqual.ts deleted file mode 100644 index f6957ba2c6f..00000000000 --- a/packages/react-log-viewer/src/react-window/areEqual.ts +++ /dev/null @@ -1,11 +0,0 @@ -import shallowDiffers from './shallowDiffers'; - -// Custom comparison function for React.memo(). -// It knows to compare individual style props and ignore the wrapper object. -// See https://reactjs.org/docs/react-api.html#reactmemo -export function areEqual(prevProps: any, nextProps: any): boolean { - const { style: prevStyle, ...prevRest } = prevProps; - const { style: nextStyle, ...nextRest } = nextProps; - - return !shallowDiffers(prevStyle, nextStyle) && !shallowDiffers(prevRest, nextRest); -} diff --git a/packages/react-log-viewer/src/react-window/createListComponent.ts b/packages/react-log-viewer/src/react-window/createListComponent.ts deleted file mode 100644 index c02da9e4ebc..00000000000 --- a/packages/react-log-viewer/src/react-window/createListComponent.ts +++ /dev/null @@ -1,490 +0,0 @@ -import memoizeOne from 'memoize-one'; -import { createElement, PureComponent } from 'react'; -import { cancelTimeout, requestTimeout } from './timer'; - -import { TimeoutID } from './timer'; - -export type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end'; - -export interface RowProps { - data: any; - index: number; - isScrolling?: boolean; - style: React.CSSProperties; - ansiUp: any; -} - -export interface ListProps { - estimatedItemSize?: number; - children: React.FunctionComponent; - [key: string]: any; -} - -export interface ItemMetadata { - offset: number; - size: number; -} - -export interface InstanceProps { - itemMetadataMap: { [index: number]: ItemMetadata }; - estimatedItemSize: number; - lastMeasuredIndex: number; -} - -type ScrollDirection = 'forward' | 'backward'; - -type onItemsRenderedCallback = ({ - overscanStartIndex, - overscanStopIndex, - visibleStartIndex, - visibleStopIndex -}: { - overscanStartIndex: number; - overscanStopIndex: number; - visibleStartIndex: number; - visibleStopIndex: number; -}) => void; - -type ScrollEvent = React.SyntheticEvent; - -export interface State { - instance: any; - isScrolling: boolean; - scrollDirection: ScrollDirection; - scrollOffset: number; - scrollOffsetToBottom: number; - scrollUpdateWasRequested: boolean; -} - -type GetItemOffset = (props: ListProps, index: number, instanceProps?: any) => number; -type GetItemSize = (props: ListProps, index?: number, instanceProps?: any) => number; -type GetEstimatedTotalSize = (props: ListProps, instanceProps?: any) => number; -type GetOffsetForIndexAndAlignment = ( - props: ListProps, - index: number, - align: ScrollToAlign, - scrollOffset: number, - instanceProps?: any -) => number; -type GetStartIndexForOffset = (props: ListProps, offset: number, instanceProps?: any) => number; -type GetStopIndexForStartIndex = ( - props: ListProps, - startIndex: number, - scrollOffset: number, - instanceProps?: InstanceProps -) => number; -type InitInstanceProps = (props?: ListProps, instance?: any) => any; -type ValidateProps = (props: ListProps) => void; - -const IS_SCROLLING_DEBOUNCE_INTERVAL = 150; - -const defaultItemKey = (index: number, _data: any) => index; - -// In DEV mode, this Set helps us only log a warning once per component instance. -// This avoids spamming the console every time a render happens. -let devWarningsTagName: WeakSet = null; -if (process.env.NODE_ENV !== 'production') { - if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') { - devWarningsTagName = new WeakSet(); - } -} - -export default function createListComponent({ - getItemOffset, - getEstimatedTotalSize, - getItemSize, - getOffsetForIndexAndAlignment, - getStartIndexForOffset, - getStopIndexForStartIndex, - initInstanceProps, - shouldResetStyleCacheOnItemSizeChange, - validateProps -}: { - getItemOffset: GetItemOffset; - getEstimatedTotalSize: GetEstimatedTotalSize; - getItemSize: GetItemSize; - getOffsetForIndexAndAlignment: GetOffsetForIndexAndAlignment; - getStartIndexForOffset: GetStartIndexForOffset; - getStopIndexForStartIndex: GetStopIndexForStartIndex; - initInstanceProps: InitInstanceProps; - shouldResetStyleCacheOnItemSizeChange: boolean; - validateProps: ValidateProps; -}) { - return class List extends PureComponent { - _instanceProps = initInstanceProps(this.props, this); - _outerRef?: HTMLDivElement; - _resetIsScrollingTimeoutId: TimeoutID | null = null; - - static defaultProps = { - itemData: undefined as any, - overscanCount: 2, - useIsScrolling: false - }; - - state: State = { - instance: this, - isScrolling: false, - scrollDirection: 'forward', - scrollOffset: typeof this.props.initialScrollOffset === 'number' ? this.props.initialScrollOffset : 0, - scrollOffsetToBottom: -1, - scrollUpdateWasRequested: false - }; - - // Always use explicit constructor for React components. - // It produces less code after transpilation. (#26) - // eslint-disable-next-line no-useless-constructor - constructor(props: ListProps) { - super(props); - } - - static getDerivedStateFromProps(nextProps: ListProps, prevState: State): State | null { - validateSharedProps(nextProps, prevState); - validateProps(nextProps); - return null; - } - - scrollTo(scrollOffset: number): void { - scrollOffset = Math.max(0, scrollOffset); - - this.setState(prevState => { - if (prevState.scrollOffset === scrollOffset) { - return null; - } - return { - scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward', - scrollOffset, - scrollUpdateWasRequested: true - }; - }, this._resetIsScrollingDebounced); - } - - scrollToItem(index: number, align: ScrollToAlign = 'auto'): void { - const { itemCount } = this.props; - const { scrollOffset } = this.state; - - index = Math.max(0, Math.min(index, itemCount - 1)); - - this.scrollTo(getOffsetForIndexAndAlignment(this.props, index, align, scrollOffset, this._instanceProps)); - } - - scrollToBottom(): void { - const outerRef = this._outerRef as HTMLElement; - const { scrollHeight, clientHeight } = outerRef; - - this.scrollTo(scrollHeight - clientHeight); - } - - onTextSelectionStart(): void { - if (this._outerRef) { - this._outerRef.style.overflowY = 'hidden'; - } - } - - onTextSelectionStop(): void { - if (this._outerRef) { - this._outerRef.style.overflowY = 'auto'; - } - } - - componentDidMount() { - const { initialScrollOffset } = this.props; - - if (typeof initialScrollOffset === 'number' && this._outerRef != null) { - const outerRef = this._outerRef as HTMLElement; - outerRef.scrollTop = initialScrollOffset; - } - const innerRef = this._outerRef.firstChild; // innerRef will be 'pf-c-log-viewer__list' - ['mousedown', 'touchstart'].forEach(event => { - innerRef.addEventListener(event, this.onTextSelectionStart.bind(this)); - }); - // set mouseup event listener on the whole document - // because the cursor could be out side of the log window when the mouse is up - // in that case the window would not be able to scroll up and down because overflow-Y is not set back to 'auto' - ['mouseup', 'touchend'].forEach(event => { - document.addEventListener(event, this.onTextSelectionStop.bind(this)); - }); - this._callPropsCallbacks(); - } - - componentDidUpdate() { - const { scrollOffset, scrollUpdateWasRequested } = this.state; - - if (scrollUpdateWasRequested && this._outerRef != null) { - const outerRef = this._outerRef as HTMLElement; - outerRef.scrollTop = scrollOffset; - } - - this._callPropsCallbacks(); - } - - componentWillUnmount() { - if (this._resetIsScrollingTimeoutId !== null) { - cancelTimeout(this._resetIsScrollingTimeoutId); - } - const innerRef = this._outerRef.firstChild; // innerRef will be 'pf-c-log-viewer__list' - ['mousedown', 'touchstart'].forEach(event => { - innerRef.removeEventListener(event, this.onTextSelectionStart.bind(this)); - }); - ['mouseup', 'touchend'].forEach(event => { - document.removeEventListener(event, this.onTextSelectionStop.bind(this)); - }); - } - - render() { - const { - children, - outerClassName, - innerClassName, - height, - innerRef, - innerElementType, - innerTagName, - itemCount, - itemData, - itemKey = defaultItemKey, - outerElementType, - outerTagName, - style, - useIsScrolling, - width, - isTextWrapped, - hasLineNumbers, - indexWidth, - ansiUp - } = this.props; - const { isScrolling } = this.state; - - const onScroll = this._onScrollVertical; - - const [startIndex, stopIndex] = this._getRangeToRender(); - - const items = []; - if (itemCount > 0) { - for (let index = startIndex; index <= stopIndex; index++) { - items.push( - createElement(children, { - data: itemData, - key: itemKey(index, itemData), - index, - isScrolling: useIsScrolling ? isScrolling : undefined, - style: this._getItemStyle(index), - ansiUp - }) - ); - } - } - - // Read this value AFTER items have been created, - // So their actual sizes (if variable) are taken into consideration. - const estimatedTotalSize = getEstimatedTotalSize(this.props, this._instanceProps); - - return createElement( - outerElementType || outerTagName || 'div', - { - className: outerClassName, - onScroll, - ref: this._outerRefSetter, - tabIndex: 0, - style: { - height, - paddingTop: 0, - paddingBottom: 0, - WebkitOverflowScrolling: 'touch', - overflowX: isTextWrapped ? 'hidden' : 'auto', - ...style - } - }, - createElement( - innerElementType || innerTagName || 'div', - { - className: innerClassName, - ref: innerRef, - style: { - height: estimatedTotalSize > height ? estimatedTotalSize : height, - /* eslint-disable-next-line no-nested-ternary */ - width: isTextWrapped ? (hasLineNumbers ? width - indexWidth : width) : 'auto', - pointerEvents: isScrolling ? 'none' : undefined - } - }, - items - ) - ); - } - - _callOnItemsRendered = memoizeOne( - (overscanStartIndex: number, overscanStopIndex: number, visibleStartIndex: number, visibleStopIndex: number) => - (this.props.onItemsRendered as onItemsRenderedCallback)({ - overscanStartIndex, - overscanStopIndex, - visibleStartIndex, - visibleStopIndex - }) - ); - - _callOnScroll = memoizeOne( - ( - scrollDirection: ScrollDirection, - scrollOffset: number, - scrollOffsetToBottom: number, - scrollUpdateWasRequested: boolean - ) => - this.props.onScroll({ - scrollDirection, - scrollOffset, - scrollOffsetToBottom, - scrollUpdateWasRequested - }) - ); - - _callPropsCallbacks() { - if (typeof this.props.onItemsRendered === 'function') { - const { itemCount } = this.props; - if (itemCount > 0) { - const [overscanStartIndex, overscanStopIndex, visibleStartIndex, visibleStopIndex] = this._getRangeToRender(); - this._callOnItemsRendered(overscanStartIndex, overscanStopIndex, visibleStartIndex, visibleStopIndex); - } - } - - if (typeof this.props.onScroll === 'function') { - const { scrollDirection, scrollOffset, scrollOffsetToBottom, scrollUpdateWasRequested } = this.state; - this._callOnScroll(scrollDirection, scrollOffset, scrollOffsetToBottom, scrollUpdateWasRequested); - } - } - - // Lazily create and cache item styles while scrolling, - // So that pure component sCU will prevent re-renders. - // We maintain this cache, and pass a style prop rather than index, - // So that List can clear cached styles and force item re-render if necessary. - _getItemStyle = (index: number): Object => { - const { itemSize } = this.props; - - const itemStyleCache = this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && itemSize); - - let style; - if (itemStyleCache.hasOwnProperty(index)) { - style = itemStyleCache[index]; - } else { - const offset = getItemOffset(this.props, index, this._instanceProps); - const size = getItemSize(this.props, index, this._instanceProps); - - itemStyleCache[index] = style = { - position: 'absolute', - top: offset, - height: size - }; - } - - return style; - }; - - _getItemStyleCache = memoizeOne(() => ({})) as (itemSize?: any) => { [key: number]: Object }; - - _getRangeToRender(): [number, number, number, number] { - const { itemCount, overscanCount } = this.props; - const { isScrolling, scrollDirection, scrollOffset } = this.state; - - if (itemCount === 0) { - return [0, 0, 0, 0]; - } - - const startIndex = getStartIndexForOffset(this.props, scrollOffset, this._instanceProps); - const stopIndex = getStopIndexForStartIndex(this.props, startIndex, scrollOffset, this._instanceProps); - - // Overscan by one item in each direction so that tab/focus works. - // If there isn't at least one extra item, tab loops back around. - const overscanBackward = !isScrolling || scrollDirection === 'backward' ? Math.max(1, overscanCount) : 1; - const overscanForward = !isScrolling || scrollDirection === 'forward' ? Math.max(1, overscanCount) : 1; - - return [ - Math.max(0, startIndex - overscanBackward), - Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)), - startIndex, - stopIndex - ]; - } - - _onScrollVertical = (event: ScrollEvent): void => { - const { clientHeight, scrollHeight, scrollTop } = event.currentTarget; - this.setState(prevState => { - if (prevState.scrollOffset === scrollTop) { - // Scroll position may have been updated by cDM/cDU, - // In which case we don't need to trigger another render, - // And we don't want to update state.isScrolling. - return null; - } - - // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds. - const scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight)); - - const scrollOffsetToBottom = scrollHeight - scrollTop - clientHeight; - - return { - isScrolling: true, - scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward', - scrollOffset, - scrollOffsetToBottom, - scrollUpdateWasRequested: false - }; - }, this._resetIsScrollingDebounced); - }; - - _outerRefSetter = (ref: any): void => { - const { outerRef } = this.props; - - this._outerRef = ref; - - if (typeof outerRef === 'function') { - outerRef(ref); - } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) { - outerRef.current = ref; - } - }; - - _resetIsScrollingDebounced = () => { - if (this._resetIsScrollingTimeoutId !== null) { - cancelTimeout(this._resetIsScrollingTimeoutId); - } - - this._resetIsScrollingTimeoutId = requestTimeout(this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL); - }; - - _resetIsScrolling = () => { - this._resetIsScrollingTimeoutId = null; - - this.setState({ isScrolling: false }, () => { - // Clear style cache after state update has been committed. - // This way we don't break pure sCU for items that don't use isScrolling param. - this._getItemStyleCache(-1); - }); - }; - }; -} - -// NOTE: I considered further wrapping individual items with a pure ListItem component. -// This would avoid ever calling the render function for the same index more than once, -// But it would also add the overhead of a lot of components/fibers. -// I assume people already do this (render function returning a class component), -// So my doing it would just unnecessarily double the wrappers. - -const validateSharedProps = ({ children, innerTagName, outerTagName }: ListProps, { instance }: State): void => { - if (process.env.NODE_ENV !== 'production') { - if (innerTagName != null || outerTagName != null) { - if (devWarningsTagName && !devWarningsTagName.has(instance)) { - devWarningsTagName.add(instance); - // eslint-disable-next-line no-console - console.warn( - 'The innerTagName and outerTagName props have been deprecated. ' + - 'Please use the innerElementType and outerElementType props instead.' - ); - } - } - - if (children == null) { - throw Error( - 'An invalid "children" prop has been specified. ' + - 'Value should be a React component. ' + - `"${children === null ? 'null' : typeof children}" was specified.` - ); - } - } -}; diff --git a/packages/react-log-viewer/src/react-window/index.ts b/packages/react-log-viewer/src/react-window/index.ts deleted file mode 100644 index 63b23d90e93..00000000000 --- a/packages/react-log-viewer/src/react-window/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { areEqual } from './areEqual'; -export { VariableSizeList } from './VariableSizeList'; diff --git a/packages/react-log-viewer/src/react-window/shallowDiffers.ts b/packages/react-log-viewer/src/react-window/shallowDiffers.ts deleted file mode 100644 index 269644427b6..00000000000 --- a/packages/react-log-viewer/src/react-window/shallowDiffers.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Pulled from react-compat -// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349 -export default function shallowDiffers(prev: any, next: any): boolean { - for (const attribute in prev) { - if (!(attribute in next)) { - return true; - } - } - for (const attribute in next) { - if (prev[attribute] !== next[attribute]) { - return true; - } - } - return false; -} diff --git a/packages/react-log-viewer/src/react-window/timer.ts b/packages/react-log-viewer/src/react-window/timer.ts deleted file mode 100644 index 0a849391e50..00000000000 --- a/packages/react-log-viewer/src/react-window/timer.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Animation frame based implementation of setTimeout. -// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js - -const hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function'; - -const now = hasNativePerformanceNow ? () => performance.now() : () => Date.now(); - -export interface TimeoutID { - id: number; -} - -export function cancelTimeout(timeoutID: TimeoutID) { - cancelAnimationFrame(timeoutID.id); -} - -export function requestTimeout(callback: Function, delay: number): TimeoutID { - const start = now(); - - function tick() { - if (now() - start >= delay) { - callback.call(null); - } else { - timeoutID.id = requestAnimationFrame(tick); - } - } - - const timeoutID: TimeoutID = { - id: requestAnimationFrame(tick) - }; - - return timeoutID; -} diff --git a/packages/react-log-viewer/tsconfig.cjs.json b/packages/react-log-viewer/tsconfig.cjs.json deleted file mode 100644 index 578d46af9d3..00000000000 --- a/packages/react-log-viewer/tsconfig.cjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./dist/js", - "module": "commonjs", - "tsBuildInfoFile": "dist/cjs.tsbuildinfo" - } -} diff --git a/packages/react-log-viewer/tsconfig.json b/packages/react-log-viewer/tsconfig.json deleted file mode 100644 index f08aeb83272..00000000000 --- a/packages/react-log-viewer/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "extends": "../tsconfig.base.json", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./dist/esm", - "tsBuildInfoFile": "dist/esm.tsbuildinfo" - }, - "include": [ - "./src/*", - "./src/**/*" - ], - "references": [ - { - "path": "../react-core" - }, - { - "path": "../react-icons" - }, - { - "path": "../react-styles" - } - ] -} diff --git a/packages/react-topology/.npmignore b/packages/react-topology/.npmignore deleted file mode 100644 index 491b5aeb360..00000000000 --- a/packages/react-topology/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -dist/*.tsbuildinfo -tsconfig.* \ No newline at end of file diff --git a/packages/react-topology/CHANGELOG.md b/packages/react-topology/CHANGELOG.md deleted file mode 100644 index 9719a0fd6ae..00000000000 --- a/packages/react-topology/CHANGELOG.md +++ /dev/null @@ -1,11915 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [4.90.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.37...@patternfly/react-topology@4.90.38) (2022-12-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.36...@patternfly/react-topology@4.90.37) (2022-12-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.35...@patternfly/react-topology@4.90.36) (2022-12-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.34...@patternfly/react-topology@4.90.35) (2022-12-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.90.34 (2022-12-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.90.33 (2022-12-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.31...@patternfly/react-topology@4.90.32) (2022-12-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.30...@patternfly/react-topology@4.90.31) (2022-12-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.29...@patternfly/react-topology@4.90.30) (2022-12-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.28...@patternfly/react-topology@4.90.29) (2022-12-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.27...@patternfly/react-topology@4.90.28) (2022-12-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.90.27 (2022-12-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.25...@patternfly/react-topology@4.90.26) (2022-12-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.90.25 (2022-12-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.90.24 (2022-11-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.22...@patternfly/react-topology@4.90.23) (2022-11-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.21...@patternfly/react-topology@4.90.22) (2022-11-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.20...@patternfly/react-topology@4.90.21) (2022-11-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.19...@patternfly/react-topology@4.90.20) (2022-11-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.18...@patternfly/react-topology@4.90.19) (2022-11-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.17...@patternfly/react-topology@4.90.18) (2022-11-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.16...@patternfly/react-topology@4.90.17) (2022-11-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.15...@patternfly/react-topology@4.90.16) (2022-11-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.14...@patternfly/react-topology@4.90.15) (2022-11-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.13...@patternfly/react-topology@4.90.14) (2022-11-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.90.13 (2022-11-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.11...@patternfly/react-topology@4.90.12) (2022-11-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.10...@patternfly/react-topology@4.90.11) (2022-10-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.9...@patternfly/react-topology@4.90.10) (2022-10-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.8...@patternfly/react-topology@4.90.9) (2022-10-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.7...@patternfly/react-topology@4.90.8) (2022-10-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.90.7 (2022-10-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.5...@patternfly/react-topology@4.90.6) (2022-10-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.4...@patternfly/react-topology@4.90.5) (2022-10-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.3...@patternfly/react-topology@4.90.4) (2022-10-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.2...@patternfly/react-topology@4.90.3) (2022-10-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.1...@patternfly/react-topology@4.90.2) (2022-10-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.90.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.90.0...@patternfly/react-topology@4.90.1) (2022-10-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [4.90.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.89.0...@patternfly/react-topology@4.90.0) (2022-10-21) - - -### Features - -* **topology:** Allow tooltip usage on pipeline task node badges ([#8208](https://github.com/patternfly/patternfly-react/issues/8208)) ([f0a87ba](https://github.com/patternfly/patternfly-react/commit/f0a87ba7563c5194ea254c7e57b2b5e60be1eb58)) - - - - - -# [4.89.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.43...@patternfly/react-topology@4.89.0) (2022-10-21) - - -### Features - -* **Topology:** Add option to fit layout to screen upon layout completion ([#8210](https://github.com/patternfly/patternfly-react/issues/8210)) ([01da036](https://github.com/patternfly/patternfly-react/commit/01da0368318e1b3e6eb3362202a3a207bea07625)) - - - - - -## [4.88.43](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.42...@patternfly/react-topology@4.88.43) (2022-10-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.41...@patternfly/react-topology@4.88.42) (2022-10-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.40...@patternfly/react-topology@4.88.41) (2022-10-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.40](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.39...@patternfly/react-topology@4.88.40) (2022-10-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.38...@patternfly/react-topology@4.88.39) (2022-10-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.37...@patternfly/react-topology@4.88.38) (2022-10-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.36...@patternfly/react-topology@4.88.37) (2022-10-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.35...@patternfly/react-topology@4.88.36) (2022-10-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.34...@patternfly/react-topology@4.88.35) (2022-10-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.33...@patternfly/react-topology@4.88.34) (2022-10-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.32...@patternfly/react-topology@4.88.33) (2022-10-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.31...@patternfly/react-topology@4.88.32) (2022-10-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.30...@patternfly/react-topology@4.88.31) (2022-10-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.29...@patternfly/react-topology@4.88.30) (2022-10-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.28...@patternfly/react-topology@4.88.29) (2022-10-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.88.28 (2022-10-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.26...@patternfly/react-topology@4.88.27) (2022-10-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.25...@patternfly/react-topology@4.88.26) (2022-10-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.88.25 (2022-10-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.23...@patternfly/react-topology@4.88.24) (2022-10-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.22...@patternfly/react-topology@4.88.23) (2022-10-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.88.22 (2022-09-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.20...@patternfly/react-topology@4.88.21) (2022-09-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.19...@patternfly/react-topology@4.88.20) (2022-09-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.18...@patternfly/react-topology@4.88.19) (2022-09-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.17...@patternfly/react-topology@4.88.18) (2022-09-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.88.17 (2022-09-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.15...@patternfly/react-topology@4.88.16) (2022-09-29) - - -### Bug Fixes - -* **Topology:** Fix for multiple popovers occurring for pipeline badges ([#8110](https://github.com/patternfly/patternfly-react/issues/8110)) ([85f5899](https://github.com/patternfly/patternfly-react/commit/85f589931b2b3b9d0e5ae4a9e4d86bdb7aa0e594)) - - - - - -## [4.88.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.14...@patternfly/react-topology@4.88.15) (2022-09-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.13...@patternfly/react-topology@4.88.14) (2022-09-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.12...@patternfly/react-topology@4.88.13) (2022-09-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.11...@patternfly/react-topology@4.88.12) (2022-09-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.10...@patternfly/react-topology@4.88.11) (2022-09-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.9...@patternfly/react-topology@4.88.10) (2022-09-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.8...@patternfly/react-topology@4.88.9) (2022-09-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.7...@patternfly/react-topology@4.88.8) (2022-09-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.88.7 (2022-09-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.88.6 (2022-09-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.4...@patternfly/react-topology@4.88.5) (2022-09-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.88.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.88.3...@patternfly/react-topology@4.88.4) (2022-09-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.88.3 (2022-09-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.88.2 (2022-09-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.88.1 (2022-09-20) - - -### Bug Fixes - -* **OverflowMenu:** store resize listener reference ([#7975](https://github.com/patternfly/patternfly-react/issues/7975)) ([86b0193](https://github.com/patternfly/patternfly-react/commit/86b01936a3029886173654925eb5d11d9077fc56)) - - - - - -# 4.88.0 (2022-09-19) - - -### Features - -* **Wizard - next:** supporting component unit tests ([#7731](https://github.com/patternfly/patternfly-react/issues/7731)) ([2e4ec26](https://github.com/patternfly/patternfly-react/commit/2e4ec26d428b6be0ca4254b29e03c889eb5625bb)) - - - - - -# 4.87.0 (2022-09-16) - - -### Features - -* **charts:** Update Victory dependencies ([#7986](https://github.com/patternfly/patternfly-react/issues/7986)) ([bbee15f](https://github.com/patternfly/patternfly-react/commit/bbee15fd0e00288dfa72c88a79a685b5405a355e)) - - - - - -## 4.86.1 (2022-09-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.86.0 (2022-09-14) - - -### Features - -* **Dropdown next:** Added the next version of the dropdown component ([#7955](https://github.com/patternfly/patternfly-react/issues/7955)) ([c092c7c](https://github.com/patternfly/patternfly-react/commit/c092c7cfaf877c5783c9ad9db0a8010b8ea023eb)) - - - - - -# 4.85.0 (2022-09-14) - - -### Features - -* **SearchInput:** new expandable button for masthead variant ([#7903](https://github.com/patternfly/patternfly-react/issues/7903)) ([d2a6c47](https://github.com/patternfly/patternfly-react/commit/d2a6c471ea3440d0b751b752b44ca1e8e749c5b6)) - - - - - -## 4.84.11 (2022-09-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.84.10 (2022-09-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.84.9 (2022-09-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.84.8 (2022-09-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.84.7 (2022-09-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.84.6 (2022-09-12) - - -### Bug Fixes - -* **Treeview:** ignore folder selection in basic example ([#7906](https://github.com/patternfly/patternfly-react/issues/7906)) ([b16b224](https://github.com/patternfly/patternfly-react/commit/b16b2240d26cabcadec3de52627fb1d96ff45aef)) - - - - - -## 4.84.5 (2022-09-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.84.4 (2022-09-09) - - -### Bug Fixes - -* **Modal, Dropdown, TreeView:** updates to resolve strict TS errors ([#7890](https://github.com/patternfly/patternfly-react/issues/7890)) ([011215b](https://github.com/patternfly/patternfly-react/commit/011215be95dfff1408e437c0b1062835669ff041)) - - - - - -## 4.84.3 (2022-09-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.84.2 (2022-09-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.84.1 (2022-09-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.84.0 (2022-09-09) - - -### Features - -* **Button:** new count number prop ([#7910](https://github.com/patternfly/patternfly-react/issues/7910)) ([a096b3c](https://github.com/patternfly/patternfly-react/commit/a096b3cba080b5bcd87777efe0e96e64c6da121f)) - - - - - -## 4.83.14 (2022-09-08) - - -### Bug Fixes - -* **Page:** Fixed page group props regression ([#7948](https://github.com/patternfly/patternfly-react/issues/7948)) ([044444e](https://github.com/patternfly/patternfly-react/commit/044444e11fb90d53dc8f783071d3e3dc517532a0)) - - - - - -## 4.83.13 (2022-09-08) - - -### Bug Fixes - -* **table:** fix bug in expandable demo ([#7945](https://github.com/patternfly/patternfly-react/issues/7945)) ([711b196](https://github.com/patternfly/patternfly-react/commit/711b19609dd8023b157a99f6988ff8618ccee35d)) - - - - - -## 4.83.12 (2022-09-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.83.11 (2022-09-07) - - -### Bug Fixes - -* **dashboardheader:** update brand image src to absolute import path for codesandbox functionality ([#7935](https://github.com/patternfly/patternfly-react/issues/7935)) ([6190a7f](https://github.com/patternfly/patternfly-react/commit/6190a7fd51a9606c9f1bf06aa0ebd46215fbd341)) - - - - - -## 4.83.10 (2022-09-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.83.9 (2022-09-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.83.8 (2022-09-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.83.7 (2022-09-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.83.6 (2022-09-06) - - -### Bug Fixes - -* **Page:** avoid unnecessary re-renders ([#7940](https://github.com/patternfly/patternfly-react/issues/7940)) ([3e23142](https://github.com/patternfly/patternfly-react/commit/3e23142c489ae5b77357345dbbeaa63cc175ea05)) - - - - - -## 4.83.5 (2022-09-02) - - -### Bug Fixes - -* **MenuToggle:** Fixed props not displaying in docs ([#7919](https://github.com/patternfly/patternfly-react/issues/7919)) ([8ca73e4](https://github.com/patternfly/patternfly-react/commit/8ca73e4dae9542646aff846511033bb7ae4fb2ef)) - - - - - -## 4.83.4 (2022-09-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.83.3 (2022-09-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.83.2 (2022-09-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.83.1 (2022-09-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.83.0 (2022-09-01) - - -### Features - -* **PageSection:** add ability to specify HTML element via prop ([#7891](https://github.com/patternfly/patternfly-react/issues/7891)) ([a9e20e4](https://github.com/patternfly/patternfly-react/commit/a9e20e4b6303fb673ed9222323a1114c3e68f8d6)) - - - - - -## 4.82.8 (2022-08-31) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.82.7 (2022-08-31) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.82.6 (2022-08-30) - - -### Bug Fixes - -* **NumberInput:** prevent errors when onChange is passed via inputProps ([#7908](https://github.com/patternfly/patternfly-react/issues/7908)) ([9cabeed](https://github.com/patternfly/patternfly-react/commit/9cabeedacf98bd80214a7f7fe1e40c3a15be4490)) - - - - - -## 4.82.5 (2022-08-29) - - -### Bug Fixes - -* **NumberInput:** manage null value ([#7898](https://github.com/patternfly/patternfly-react/issues/7898)) ([b86371d](https://github.com/patternfly/patternfly-react/commit/b86371dfe703614c12f49b68c096b28a91b9debd)) - - - - - -## 4.82.4 (2022-08-29) - - -### Bug Fixes - -* syntax errors on surge ([#7897](https://github.com/patternfly/patternfly-react/issues/7897)) ([a487abf](https://github.com/patternfly/patternfly-react/commit/a487abf770340555b2c5a451b5a5bfb0ea57fd45)) - - - - - -## 4.82.3 (2022-08-25) - - -### Bug Fixes - -* react-core should export all contents of dist directory ([#7883](https://github.com/patternfly/patternfly-react/issues/7883)) ([f5088d0](https://github.com/patternfly/patternfly-react/commit/f5088d069916d7c37335503251d13b4b846f3f62)) - - - - - -## 4.82.2 (2022-08-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.82.1 (2022-08-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.82.0 (2022-08-23) - - -### Features - -* **WizardComposable:** Created composable spinoff of wizard w/ enhancements ([#7703](https://github.com/patternfly/patternfly-react/issues/7703)) ([76eab29](https://github.com/patternfly/patternfly-react/commit/76eab29b640e2f71cd9bd5d42f58fa8dd0eba799)) - - - - - -## 4.81.4 (2022-08-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.81.3 (2022-08-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.81.2 (2022-08-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.81.1 (2022-08-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.81.0 (2022-08-22) - - -### Features - -* **Timestamp:** create component ([#7815](https://github.com/patternfly/patternfly-react/issues/7815)) ([98058b3](https://github.com/patternfly/patternfly-react/commit/98058b35c4b7d5e916abd7318e020e53783f73a6)) - - - - - -## 4.80.1 (2022-08-22) - - -### Bug Fixes - -* **TimePicker:** clean up menuAppendTo feature ([#7865](https://github.com/patternfly/patternfly-react/issues/7865)) ([3aa73be](https://github.com/patternfly/patternfly-react/commit/3aa73beb4581c1695aa3c3886291d862bd82286e)) - - - - - -# 4.80.0 (2022-08-19) - - -### Features - -* **ExpandableSection:** add truncated variant ([#7852](https://github.com/patternfly/patternfly-react/issues/7852)) ([f628cdf](https://github.com/patternfly/patternfly-react/commit/f628cdf571d71addfc04e69728be73895e261094)) - - - - - -## 4.79.13 (2022-08-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.79.12 (2022-08-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.79.11 (2022-08-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.79.10 (2022-08-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.79.9 (2022-08-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.79.8 (2022-08-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.79.7 (2022-08-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.79.6 (2022-08-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.79.5 (2022-08-17) - - -### Bug Fixes - -* **charts:** add victory-cursor-container dependency ([#7803](https://github.com/patternfly/patternfly-react/issues/7803)) ([6f1f00d](https://github.com/patternfly/patternfly-react/commit/6f1f00d0d60d9f841a3204e9378ac93a4333c41b)) - - - - - -## 4.79.4 (2022-08-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.79.3 (2022-08-16) - - -### Bug Fixes - -* **Select:** apply aria-describedby to correct element ([#7790](https://github.com/patternfly/patternfly-react/issues/7790)) ([1795ff5](https://github.com/patternfly/patternfly-react/commit/1795ff5a939cfab5af03f11640737377b7c39441)) - - - - - -## 4.79.2 (2022-08-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.79.1 (2022-08-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.79.0 (2022-08-16) - - -### Features - -* Allow for 'next' and 'deprecated' react-core subpaths ([#7824](https://github.com/patternfly/patternfly-react/issues/7824)) ([0e68bd3](https://github.com/patternfly/patternfly-react/commit/0e68bd349e9a8b4b08bb8b777358dcde41d5462f)) - - - - - -## 4.78.9 (2022-08-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.78.8 (2022-08-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.78.7 (2022-08-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.78.6 (2022-08-10) - - -### Reverts - -* Revert "feat(VisualizationSurface): replace react-measure with react-resize-detector (#7706)" (#7809) ([3c9cd8f](https://github.com/patternfly/patternfly-react/commit/3c9cd8f32d621f30aef0a4d4e0aa892b08354e7b)), closes [#7706](https://github.com/patternfly/patternfly-react/issues/7706) [#7809](https://github.com/patternfly/patternfly-react/issues/7809) - - - - - -## 4.78.5 (2022-08-05) - - -### Bug Fixes - -* **MenuToggle:** update base type to include div attributes as well ([#7798](https://github.com/patternfly/patternfly-react/issues/7798)) ([330e496](https://github.com/patternfly/patternfly-react/commit/330e496a7f1fb715ab06a6f6d118f1db8705828a)) - - - - - -## 4.78.4 (2022-08-05) - - -### Bug Fixes - -* **MenuToggle:** undo type change causing errors ([#7797](https://github.com/patternfly/patternfly-react/issues/7797)) ([1031ecb](https://github.com/patternfly/patternfly-react/commit/1031ecbeb5b4fa7eb28ed9c035454c7b408b8da8)) - - - - - -## 4.78.3 (2022-08-04) - - -### Bug Fixes - -* **charts:** remove uniqueId generation for labels and axis ticks ([#7794](https://github.com/patternfly/patternfly-react/issues/7794)) ([9c44131](https://github.com/patternfly/patternfly-react/commit/9c4413119f14e3e45a1ed12bd870120e278ebc20)) - - - - - -## 4.78.2 (2022-08-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.78.1 (2022-08-03) - - -### Bug Fixes - -* **Menu:** can navigate via keyboard for checkbox variant ([#7743](https://github.com/patternfly/patternfly-react/issues/7743)) ([7cfa876](https://github.com/patternfly/patternfly-react/commit/7cfa87682c225c3e93d6c4e0925b3c34aaede633)) - - - - - -# 4.78.0 (2022-08-03) - - -### Features - -* **MenuToggle:** add split button variants ([#7748](https://github.com/patternfly/patternfly-react/issues/7748)) ([7577725](https://github.com/patternfly/patternfly-react/commit/7577725305533791481ac22d9b36b87d5d3167b1)) - - - - - -## 4.77.1 (2022-08-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.77.0 (2022-08-01) - - -### Features - -* **Page:** add support for vertical breakpoints, add sticky breadcrumb demo ([#7764](https://github.com/patternfly/patternfly-react/issues/7764)) ([9db582d](https://github.com/patternfly/patternfly-react/commit/9db582d63a3499fa78ea8fab3ce31b7877cd479d)) - - - - - -# 4.76.0 (2022-08-01) - - -### Features - -* **DescriptionList:** add Display and Card variants ([#7713](https://github.com/patternfly/patternfly-react/issues/7713)) ([8c6e6d8](https://github.com/patternfly/patternfly-react/commit/8c6e6d83cdbe989d306c64f945aac206eac3ff91)) - - - - - -## 4.75.1 (2022-08-01) - - -### Bug Fixes - -* **Menu/Nav:** flyout variants work with VO navigation ([#7772](https://github.com/patternfly/patternfly-react/issues/7772)) ([6ad76cc](https://github.com/patternfly/patternfly-react/commit/6ad76cc1b466e8e93773f58002acf5ca54ad6e36)) - - - - - -# 4.75.0 (2022-07-29) - - -### Features - -* **Tabs:** add horizontal overflow option ([#7742](https://github.com/patternfly/patternfly-react/issues/7742)) ([2745cd1](https://github.com/patternfly/patternfly-react/commit/2745cd199669b0c0a5cdbd5c3d4e7453c6e1c435)) - - - - - -## 4.74.9 (2022-07-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.74.8 (2022-07-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.74.7 (2022-07-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.74.6 (2022-07-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.74.5 (2022-07-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.74.4 (2022-07-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.74.3 (2022-07-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.74.2 (2022-07-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.74.1 (2022-07-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.74.0 (2022-07-26) - - -### Features - -* **Dropdown:** added secondary styling to split action button ([#7746](https://github.com/patternfly/patternfly-react/issues/7746)) ([e701c32](https://github.com/patternfly/patternfly-react/commit/e701c32bb36097770ecb2c3e17e15df0b720488f)) - - - - - -## 4.73.2 (2022-07-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.73.1 (2022-07-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.73.0 (2022-07-26) - - -### Features - -* **topology:** Pipelines support for badges/icons variable task node width ([#7697](https://github.com/patternfly/patternfly-react/issues/7697)) ([a499273](https://github.com/patternfly/patternfly-react/commit/a49927315cd61e84a007d05b49e5d7254b977fcb)) - - - - - -## 4.72.11 (2022-07-25) - - -### Bug Fixes - -* **Select:** remove variant check from update logic ([#7741](https://github.com/patternfly/patternfly-react/issues/7741)) ([2204cb6](https://github.com/patternfly/patternfly-react/commit/2204cb62e30b4a37b82731f1380e79a3085828ef)) - - - - - -## 4.72.10 (2022-07-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.72.9 (2022-07-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.72.8 (2022-07-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.72.7 (2022-07-20) - - -### Bug Fixes - -* **Switch:** aria labelledby to update with change ([#7557](https://github.com/patternfly/patternfly-react/issues/7557)) ([9647a0c](https://github.com/patternfly/patternfly-react/commit/9647a0c7f7eb2174f006774b4406408bd065fddc)) - - - - - -## 4.72.6 (2022-07-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.72.5 (2022-07-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.72.4 (2022-07-15) - - -### Bug Fixes - -* **LogViewer:** render correctly when there is '\n' in the string array ([#7681](https://github.com/patternfly/patternfly-react/issues/7681)) ([12222c7](https://github.com/patternfly/patternfly-react/commit/12222c76d47396d8df5134c607a9ff689d6d93c9)) - - - - - -## 4.72.3 (2022-07-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.72.2 (2022-07-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.72.1 (2022-07-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.72.0 (2022-07-14) - - -### Features - -* **Topology:** Add Topology pipeline support ([#7609](https://github.com/patternfly/patternfly-react/issues/7609)) ([4fb563f](https://github.com/patternfly/patternfly-react/commit/4fb563fb8651c0386f7cc59fd9c736af6fb683ec)) - - - - - -## 4.71.15 (2022-07-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.14 (2022-07-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.13 (2022-07-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.12 (2022-07-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.11 (2022-07-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.10 (2022-07-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.9 (2022-07-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.8 (2022-07-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.7 (2022-07-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.6 (2022-07-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.5 (2022-07-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.4 (2022-07-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.3 (2022-07-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.2 (2022-06-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.71.1 (2022-06-29) - - -### Bug Fixes - -* **Select:** update logic should only apply to typeahead ([#7632](https://github.com/patternfly/patternfly-react/issues/7632)) ([0b9148e](https://github.com/patternfly/patternfly-react/commit/0b9148e67030236e61423895c6632b20dac4617f)) - - - - - -# 4.71.0 (2022-06-27) - - -### Features - -* **wizard:** add support for additional information panel (drawer) ([#7323](https://github.com/patternfly/patternfly-react/issues/7323)) ([6702504](https://github.com/patternfly/patternfly-react/commit/67025047d7bb644497f4477b77dbbdebe8ce97da)) - - - - - -## 4.70.3 (2022-06-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.70.2 (2022-06-23) - - -### Bug Fixes - -* **ProgressStepper:** added onTriggerEnter prop to Popover ([#7532](https://github.com/patternfly/patternfly-react/issues/7532)) ([1208390](https://github.com/patternfly/patternfly-react/commit/12083908a7043c017a5b7a97f84623add10bfe75)) - - - - - -## 4.70.1 (2022-06-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.70.0 (2022-06-22) - - -### Features - -* **Table:** add nested sticky header support ([#7595](https://github.com/patternfly/patternfly-react/issues/7595)) ([3888a0b](https://github.com/patternfly/patternfly-react/commit/3888a0bdf5e4e964d2d8d936c5d81f7813d8ec0c)) - - - - - -## 4.69.17 (2022-06-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.69.16 (2022-06-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.69.15 (2022-06-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.69.14 (2022-06-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.69.13 (2022-06-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.69.12 (2022-06-17) - - -### Bug Fixes - -* **Table:** account for added columns with expandable ([#7529](https://github.com/patternfly/patternfly-react/issues/7529)) ([dcde7c9](https://github.com/patternfly/patternfly-react/commit/dcde7c95eb7200b706da4d41a46f3f57b5129e40)) - - - - - -## 4.69.11 (2022-06-17) - - -### Bug Fixes - -* **Table:** update expandable examples to set column widths ([#7513](https://github.com/patternfly/patternfly-react/issues/7513)) ([c2e1e61](https://github.com/patternfly/patternfly-react/commit/c2e1e618a6924bdbb2b1e8e7ad94553615196fb2)) - - - - - -## 4.69.10 (2022-06-16) - - -### Bug Fixes - -* **Topology:** Fix for group position when it has no children ([#7573](https://github.com/patternfly/patternfly-react/issues/7573)) ([04e435e](https://github.com/patternfly/patternfly-react/commit/04e435ebc87ad7d1c687db95ee8ef8beffae514d)) - - - - - -## 4.69.9 (2022-06-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.69.8 (2022-06-16) - - -### Bug Fixes - -* **Table:** filterable table demo icon text spacing fix ([#7477](https://github.com/patternfly/patternfly-react/issues/7477)) ([e35387f](https://github.com/patternfly/patternfly-react/commit/e35387f42b355000ff66a79e1031eb6e9a7bb8c3)) - - - - - -## 4.69.7 (2022-06-16) - - -### Bug Fixes - -* **console:** add SUSE instruction for virt-viewer ([#7445](https://github.com/patternfly/patternfly-react/issues/7445)) ([2ac5adb](https://github.com/patternfly/patternfly-react/commit/2ac5adb581d673e0687f438baeb7859125bd30d4)), closes [#7519](https://github.com/patternfly/patternfly-react/issues/7519) - - - - - -## 4.69.6 (2022-06-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.69.5 (2022-06-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.69.4 (2022-06-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.69.3 (2022-06-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.69.2 (2022-06-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.69.1 (2022-06-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.69.0 (2022-06-14) - - -### Features - -* **Form:** add functionality for form group roles ([#7516](https://github.com/patternfly/patternfly-react/issues/7516)) ([4ff2f54](https://github.com/patternfly/patternfly-react/commit/4ff2f54ce21363e9c40c47517f20b8fc5e0cb401)) - - - - - -## 4.68.17 (2022-06-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.16 (2022-06-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.15 (2022-06-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.14 (2022-06-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.13 (2022-06-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.12 (2022-06-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.11 (2022-06-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.10 (2022-06-09) - - -### Bug Fixes - -* **Select:** retain focus on correct checkbox after view more ([#7505](https://github.com/patternfly/patternfly-react/issues/7505)) ([c9de16b](https://github.com/patternfly/patternfly-react/commit/c9de16b00a3573f74847b3953c7b408cf000fb85)) - - - - - -## 4.68.9 (2022-06-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.8 (2022-06-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.7 (2022-06-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.6 (2022-06-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.5 (2022-06-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.4 (2022-06-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.3 (2022-06-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.2 (2022-06-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.68.1 (2022-06-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.68.0 (2022-06-01) - - -### Features - -* **table:** full screen demo for sticky first column ([#7451](https://github.com/patternfly/patternfly-react/issues/7451)) ([f610dd4](https://github.com/patternfly/patternfly-react/commit/f610dd4726b16d73a166f7a57da0fa3588b8201d)) - - - - - -## 4.67.2 (2022-05-31) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.67.1 (2022-05-31) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.67.0 (2022-05-31) - - -### Features - -* **table:** add fullscreen demo for error state ([#7443](https://github.com/patternfly/patternfly-react/issues/7443)) ([eeab219](https://github.com/patternfly/patternfly-react/commit/eeab2197765589262ee7c328e57dbf1606da6d7f)) - - - - - -## 4.66.2 (2022-05-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.66.1 (2022-05-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.66.0 (2022-05-26) - - -### Features - -* **Popper:** add mouse events for popper content ([#7399](https://github.com/patternfly/patternfly-react/issues/7399)) ([47f8d12](https://github.com/patternfly/patternfly-react/commit/47f8d12e348397336287c7e7efc79665bce61ae2)) - - - - - -# 4.65.0 (2022-05-26) - - -### Features - -* **table:** add fullscreen empty state demo ([#7371](https://github.com/patternfly/patternfly-react/issues/7371)) ([54f3052](https://github.com/patternfly/patternfly-react/commit/54f30520d9d808ffe15c962b37af91cef4c21dcb)) - - - - - -## 4.64.4 (2022-05-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.64.3 (2022-05-26) - - -### Bug Fixes - -* **Select:** popper menu flips correctly ([#7434](https://github.com/patternfly/patternfly-react/issues/7434)) ([cc1eb21](https://github.com/patternfly/patternfly-react/commit/cc1eb2152246d03600a9fbbf678fd8b39f703347)) - - - - - -## 4.64.2 (2022-05-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.64.1 (2022-05-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.64.0 (2022-05-24) - - -### Features - -* **table:** add fullscreen loading state demo ([#7370](https://github.com/patternfly/patternfly-react/issues/7370)) ([285b5b7](https://github.com/patternfly/patternfly-react/commit/285b5b76cb6bb64d5fd4bd66cfb26f709457b3bc)) - - - - - -## 4.63.1 (2022-05-23) - - -### Bug Fixes - -* **Select:** allow enter to create when there is a single option ([#7444](https://github.com/patternfly/patternfly-react/issues/7444)) ([e1ae6a9](https://github.com/patternfly/patternfly-react/commit/e1ae6a9aa7dee0f8107905ec1d47463fce950ff3)) - - - - - -# 4.63.0 (2022-05-19) - - -### Features - -* **table:** update sortable demo to align with core ([#7292](https://github.com/patternfly/patternfly-react/issues/7292)) ([6891764](https://github.com/patternfly/patternfly-react/commit/6891764f2507c775005878f6e74cc5c8e44a6c68)) - - - - - -# 4.62.0 (2022-05-19) - - -### Features - -* **Menu:** Added support for checkbox menu ([#7368](https://github.com/patternfly/patternfly-react/issues/7368)) ([8c2d1dc](https://github.com/patternfly/patternfly-react/commit/8c2d1dc23dbe5c28a8c1ecf79eb34ea911da386f)) - - - - - -## 4.61.5 (2022-05-18) - - -### Bug Fixes - -* **Slider:** add support for aria-labelledby ad aria-describedby ([#7408](https://github.com/patternfly/patternfly-react/issues/7408)) ([7c8617a](https://github.com/patternfly/patternfly-react/commit/7c8617a1268a03061d51454b298c79ae5f7a59b0)) - - - - - -## 4.61.4 (2022-05-18) - - -### Bug Fixes - -* **Table:** Removed duplicate import from md file ([#7442](https://github.com/patternfly/patternfly-react/issues/7442)) ([00438a7](https://github.com/patternfly/patternfly-react/commit/00438a73c7b2548c4f0ad00ed09f9c60f99978d9)) - - - - - -## 4.61.3 (2022-05-16) - - -### Bug Fixes - -* **Chip:** add custom maxWidth prop ([#7387](https://github.com/patternfly/patternfly-react/issues/7387)) ([7cfb1a2](https://github.com/patternfly/patternfly-react/commit/7cfb1a202c2f1405c454b2e10716d9a500d4508f)) - - - - - -## 4.61.2 (2022-05-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.61.1 (2022-05-12) - - -### Bug Fixes - -* **Tabs:** make close handler optional ([#7405](https://github.com/patternfly/patternfly-react/issues/7405)) ([a84bb2a](https://github.com/patternfly/patternfly-react/commit/a84bb2aadefd7f811745b9512a26eda85241361d)) - - - - - -# 4.61.0 (2022-05-12) - - -### Features - -* **table:** expandable table demo ([#7277](https://github.com/patternfly/patternfly-react/issues/7277)) ([c081a61](https://github.com/patternfly/patternfly-react/commit/c081a61f11ceeb92688798106962e3604c243606)) - - - - - -## 4.60.6 (2022-05-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.60.5 (2022-05-11) - - -### Bug Fixes - -* **charts:** support customizing tooltip border for dark theme ([#7393](https://github.com/patternfly/patternfly-react/issues/7393)) ([7168a1d](https://github.com/patternfly/patternfly-react/commit/7168a1dc7f3a1302d719a32bcd32dcdb9ad8fb86)) - - - - - -## 4.60.4 (2022-05-11) - - -### Bug Fixes - -* **topology:** fix variables ([#7364](https://github.com/patternfly/patternfly-react/issues/7364)) ([2dec22e](https://github.com/patternfly/patternfly-react/commit/2dec22eec0f2fb8a634108e6995f747f61fa7d93)) - - - - - -## 4.60.3 (2022-05-10) - - -### Bug Fixes - -* **Card:** indicate card selectivity and status if using a screen reader ([#7144](https://github.com/patternfly/patternfly-react/issues/7144)) ([56fab43](https://github.com/patternfly/patternfly-react/commit/56fab43f801390d995ae9d0c3bdec3aa0f0d2cfb)) - - - - - -## 4.60.2 (2022-05-10) - - -### Reverts - -* Revert "docs(Dropdown): expose menuAppendTo in Dropdown prop docs (#7173)" (#7395) ([9e80f18](https://github.com/patternfly/patternfly-react/commit/9e80f1812773e269782cdb26928778e558ec5354)), closes [#7173](https://github.com/patternfly/patternfly-react/issues/7173) [#7395](https://github.com/patternfly/patternfly-react/issues/7395) - - - - - -## 4.60.1 (2022-05-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.60.0 (2022-05-10) - - -### Features - -* **Tabs:** allow dynamic close/add ([#7297](https://github.com/patternfly/patternfly-react/issues/7297)) ([51dd66c](https://github.com/patternfly/patternfly-react/commit/51dd66c59d25f96686c57de9fffe590f1c8cbe83)) - - - - - -# 4.59.0 (2022-05-09) - - -### Features - -* **charts:** added PF dark theme support ([#7310](https://github.com/patternfly/patternfly-react/issues/7310)) ([549c041](https://github.com/patternfly/patternfly-react/commit/549c041525b22d910b71a1c4f64e2cb0ba11ca8f)) - - - - - -## 4.58.6 (2022-05-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.58.5 (2022-05-09) - - -### Bug Fixes - -* **Popper:** update Popper modifiers when child DOM changes ([#7385](https://github.com/patternfly/patternfly-react/issues/7385)) ([28d0b74](https://github.com/patternfly/patternfly-react/commit/28d0b74107ae76acae535c37ea73cec3a4cf49d5)) - - - - - -## 4.58.4 (2022-05-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.58.3 (2022-05-06) - - -### Bug Fixes - -* **LogViewer:** clear ANSI cache when resetting the log window ([#7355](https://github.com/patternfly/patternfly-react/issues/7355)) ([b3354b5](https://github.com/patternfly/patternfly-react/commit/b3354b5000c5d7397c479888140b0381367cbd2c)) - - - - - -## 4.58.2 (2022-05-06) - - -### Bug Fixes - -* **Page:** add tabindex to components with hasOverflowScroll ([#7274](https://github.com/patternfly/patternfly-react/issues/7274)) ([6be2fa8](https://github.com/patternfly/patternfly-react/commit/6be2fa870aba78b833c7346ffe029f96cfc1c37d)) - - - - - -## 4.58.1 (2022-05-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.58.0 (2022-05-06) - - -### Features - -* **tokens:** Variables now include a fallback value for charts ([#7374](https://github.com/patternfly/patternfly-react/issues/7374)) ([6832688](https://github.com/patternfly/patternfly-react/commit/6832688d904159eee64510656dc4df6ed1ecb841)) - - - - - -# 4.57.0 (2022-05-05) - - -### Features - -* **charts:** Deprecate themeVariant prop for light / dark themes ([#7372](https://github.com/patternfly/patternfly-react/issues/7372)) ([362902a](https://github.com/patternfly/patternfly-react/commit/362902a72eb2b18e634423c86dea1bef89bf00e9)) - - - - - -# 4.56.0 (2022-05-05) - - -### Features - -* **drawer:** convert examples to TS ([#7329](https://github.com/patternfly/patternfly-react/issues/7329)) ([e3c6dfa](https://github.com/patternfly/patternfly-react/commit/e3c6dfa735a01c2be5a62eed8e37ad7a29b113de)) - - - - - -## 4.55.13 (2022-05-05) - - -### Bug Fixes - -* **Wixard:** Fixed id not being applied to wizard step ([#7349](https://github.com/patternfly/patternfly-react/issues/7349)) ([de6b557](https://github.com/patternfly/patternfly-react/commit/de6b557331460dd387faa1ac4c5c033757412340)) - - - - - -## 4.55.12 (2022-05-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.55.11 (2022-05-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.55.10 (2022-05-05) - - -### Bug Fixes - -* **charts:** Add style for tooltip cursor ([#7361](https://github.com/patternfly/patternfly-react/issues/7361)) ([1b3f67c](https://github.com/patternfly/patternfly-react/commit/1b3f67c3712a194bef672fe888f6a446f4bd8bc6)) - - - - - -## 4.55.9 (2022-05-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.55.8 (2022-05-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.55.7 (2022-05-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.55.6 (2022-05-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.55.5 (2022-05-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.55.4 (2022-05-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.55.3 (2022-05-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.55.2 (2022-05-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.55.1 (2022-05-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.55.0 (2022-05-02) - - -### Features - -* **divider:** add support for switching orientation at various breakpoints ([#7285](https://github.com/patternfly/patternfly-react/issues/7285)) ([6e47917](https://github.com/patternfly/patternfly-react/commit/6e47917a59fdbd0f9f647998d79d024a691a49e2)) - - - - - -# 4.54.0 (2022-04-28) - - -### Features - -* **CodeBlock:** add class to code component ([#7281](https://github.com/patternfly/patternfly-react/issues/7281)) ([844e162](https://github.com/patternfly/patternfly-react/commit/844e1621bc695c97f911f5cc64998c5d36911a4d)) - - - - - -## 4.53.6 (2022-04-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.53.5 (2022-04-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.53.4 (2022-04-25) - - -### Bug Fixes - -* **DateTimePicker:** update date placeholder ([#7266](https://github.com/patternfly/patternfly-react/issues/7266)) ([4e9a73e](https://github.com/patternfly/patternfly-react/commit/4e9a73e8f7645b7a885d15754f99b9e078449806)) - - - - - -## 4.53.3 (2022-04-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.53.2 (2022-04-21) - - -### Bug Fixes - -* **DataListCheck:** revert checked prop ([#7284](https://github.com/patternfly/patternfly-react/issues/7284)) ([d9889fc](https://github.com/patternfly/patternfly-react/commit/d9889fc86f224533f81457f384954e6a299c5677)) - - - - - -## 4.53.1 (2022-04-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.53.0 (2022-04-19) - - -### Features - -* **HelperText:** add react demos ([#7250](https://github.com/patternfly/patternfly-react/issues/7250)) ([bf68976](https://github.com/patternfly/patternfly-react/commit/bf68976bebd683c935f587795a868c32ea8c5616)) - - - - - -## 4.52.1 (2022-04-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.52.0 (2022-04-18) - - -### Features - -* **Tabs:** Add nested, unindented demo ([#7194](https://github.com/patternfly/patternfly-react/issues/7194)) ([81bd759](https://github.com/patternfly/patternfly-react/commit/81bd759189379bc558871acc791a1a34dcc2ed1a)) - - - - - -# 4.51.0 (2022-04-18) - - -### Features - -* **Progress stepper:** Updated to use render prop for popover ([#7190](https://github.com/patternfly/patternfly-react/issues/7190)) ([5eb8243](https://github.com/patternfly/patternfly-react/commit/5eb8243d63d1168d9b425a5322c08e04659ed843)) - - - - - -## 4.50.2 (2022-04-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.50.1 (2022-04-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.50.0 (2022-04-14) - - -### Features - -* **MenuToggle:** Add full width modifier ([#7232](https://github.com/patternfly/patternfly-react/issues/7232)) ([789a8a3](https://github.com/patternfly/patternfly-react/commit/789a8a3f1cb1f1d90565f8d0e6c0dbe984c0c66b)) - - - - - -## 4.49.37 (2022-04-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.36 (2022-04-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.35 (2022-04-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.34 (2022-04-13) - - -### Bug Fixes - -* **ContextSelector:** fix listener handling when using popper ([#7165](https://github.com/patternfly/patternfly-react/issues/7165)) ([af89d6a](https://github.com/patternfly/patternfly-react/commit/af89d6a334d0052205473d313ea5be0e64f3847c)) - - - - - -## 4.49.33 (2022-04-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.32 (2022-04-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.31 (2022-04-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.30 (2022-04-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.29 (2022-04-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.28 (2022-04-12) - - -### Bug Fixes - -* **demo-app:** reorder css imports to load in dark theme correctly ([#7224](https://github.com/patternfly/patternfly-react/issues/7224)) ([1341c93](https://github.com/patternfly/patternfly-react/commit/1341c9396a25f6850bf4e961e40c9ddd182d9d3b)) - - - - - -## 4.49.27 (2022-04-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.26 (2022-04-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.25 (2022-04-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.24 (2022-04-11) - - -### Bug Fixes - -* **Select:** prevent footer clicks from toggling ([#7193](https://github.com/patternfly/patternfly-react/issues/7193)) ([2cd10c2](https://github.com/patternfly/patternfly-react/commit/2cd10c2a0a11dcd14f85116369fd47dffcb12295)) - - - - - -## 4.49.23 (2022-04-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.22 (2022-04-11) - - -### Bug Fixes - -* **react-styles:** support esm import and export ([#7084](https://github.com/patternfly/patternfly-react/issues/7084)) ([b66ea14](https://github.com/patternfly/patternfly-react/commit/b66ea14fa0949b0626184455a4df46312b87171a)) - - - - - -## 4.49.21 (2022-04-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.20 (2022-04-08) - - -### Bug Fixes - -* **NumberInput:** Custom increment/decrement and thresholds ([#7159](https://github.com/patternfly/patternfly-react/issues/7159)) ([28853de](https://github.com/patternfly/patternfly-react/commit/28853de1d02a4d46d81100da895d5e73a3ec05cf)) - - - - - -## 4.49.19 (2022-04-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.18 (2022-04-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.17 (2022-04-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.16 (2022-04-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.15 (2022-04-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.14 (2022-03-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.13 (2022-03-29) - - -### Bug Fixes - -* **components:** fix newline interpolation of text input values ([#6935](https://github.com/patternfly/patternfly-react/issues/6935)) ([c667ef0](https://github.com/patternfly/patternfly-react/commit/c667ef048cbf246e920a0111d4e900f1079cc6bc)), closes [#5324](https://github.com/patternfly/patternfly-react/issues/5324) - - - - - -## 4.49.12 (2022-03-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.11 (2022-03-29) - - -### Bug Fixes - -* **Drawer:** Updated resizable drawer to make it more accessible ([#7118](https://github.com/patternfly/patternfly-react/issues/7118)) ([0363ae6](https://github.com/patternfly/patternfly-react/commit/0363ae6638aab17e55f26bae5017bcd7f83f8ed5)) - - - - - -## 4.49.10 (2022-03-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.9 (2022-03-28) - - -### Bug Fixes - -* **Select:** view more fixes ([#7107](https://github.com/patternfly/patternfly-react/issues/7107)) ([94f24f6](https://github.com/patternfly/patternfly-react/commit/94f24f65b043a2d3f3ae8fe7247aaf55b05987a7)) - - - - - -## 4.49.8 (2022-03-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.7 (2022-03-28) - - -### Bug Fixes - -* **CalendarMonth:** resolve regression for selecting a date ([#7130](https://github.com/patternfly/patternfly-react/issues/7130)) ([5397e89](https://github.com/patternfly/patternfly-react/commit/5397e895ba52434b98b4206ac47535ed36d1bf00)) - - - - - -## 4.49.6 (2022-03-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.5 (2022-03-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.4 (2022-03-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.3 (2022-03-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.2 (2022-03-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.49.1 (2022-03-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.49.0 (2022-03-23) - - -### Features - -* **Select:** add flag to not reset on select, add event to toggle callback ([#7093](https://github.com/patternfly/patternfly-react/issues/7093)) ([ec2afb1](https://github.com/patternfly/patternfly-react/commit/ec2afb1ea414f63a2fadc56bbaa968a0caad5fd6)) - - - - - -## 4.48.2 (2022-03-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.48.1 (2022-03-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.48.0 (2022-03-23) - - -### Features - -* **CalendarMonth:** make date prop optional ([#7077](https://github.com/patternfly/patternfly-react/issues/7077)) ([e388854](https://github.com/patternfly/patternfly-react/commit/e388854e26b57d7cada63832b7f52e9c7bdad9a0)) - - - - - -## 4.47.2 (2022-03-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.47.1 (2022-03-21) - - -### Bug Fixes - -* **Tooltip:** horizontal scroll bar causing misaligned tooltip ([#7062](https://github.com/patternfly/patternfly-react/issues/7062)) ([9540d0c](https://github.com/patternfly/patternfly-react/commit/9540d0c5ab256a19143381755e33b661a13d2a00)) - - - - - -# 4.47.0 (2022-03-21) - - -### Features - -* **TextInput, TextArea, FormSelect:** add isIconSprite prop ([#7052](https://github.com/patternfly/patternfly-react/issues/7052)) ([94e1a85](https://github.com/patternfly/patternfly-react/commit/94e1a855840ca74d4d934a863531359a4f84c265)) - - - - - -## 4.46.5 (2022-03-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.46.4 (2022-03-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.46.3 (2022-03-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.46.2 (2022-03-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.46.1 (2022-03-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.46.0 (2022-03-15) - - -### Features - -* **CodeEditor:** 6226 size to fit height ([#7033](https://github.com/patternfly/patternfly-react/issues/7033)) ([f18abd3](https://github.com/patternfly/patternfly-react/commit/f18abd3020e04ee6602fd168d503f43cc0de649e)) - - - - - -## 4.45.22 (2022-03-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.21 (2022-03-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.20 (2022-03-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.19 (2022-03-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.18 (2022-03-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.17 (2022-03-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.16 (2022-03-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.15 (2022-03-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.14 (2022-03-04) - - -### Bug Fixes - -* **NotificationDrawer:** Drawer receives focus after opening ([#6963](https://github.com/patternfly/patternfly-react/issues/6963)) ([f5b1c97](https://github.com/patternfly/patternfly-react/commit/f5b1c97f1c3ef6155d39d16da401fb9937b539e9)) - - - - - -## 4.45.13 (2022-03-04) - - -### Bug Fixes - -* **Toolbar:** update test ([#6995](https://github.com/patternfly/patternfly-react/issues/6995)) ([4ddaeaa](https://github.com/patternfly/patternfly-react/commit/4ddaeaad5cd550b1bd88195a7a0eb9643cdb70f4)) - - - - - -## 4.45.12 (2022-03-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.11 (2022-03-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.10 (2022-03-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.9 (2022-03-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.8 (2022-02-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.7 (2022-02-22) - - -### Bug Fixes - -* update release version number ([#6964](https://github.com/patternfly/patternfly-react/issues/6964)) ([6eefe79](https://github.com/patternfly/patternfly-react/commit/6eefe79b9eaaf871ecf93e3fdfd0e49c7326b221)) - - - - - -## 4.45.6 (2022-02-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.5 (2022-02-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.4 (2022-02-17) - - -### Bug Fixes - -* **Select:** Do not filter out view more button on filter ([#6848](https://github.com/patternfly/patternfly-react/issues/6848)) ([6c7ac8a](https://github.com/patternfly/patternfly-react/commit/6c7ac8a5e287670d7469ecc0ef137bc33583e739)) - - - - - -## 4.45.3 (2022-02-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.2 (2022-02-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.45.1 (2022-02-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.45.0 (2022-02-15) - - -### Features - -* **table:** ability to add expand/collapse all to th ([#6914](https://github.com/patternfly/patternfly-react/issues/6914)) ([ee510ee](https://github.com/patternfly/patternfly-react/commit/ee510ee8c8d3a069b75c73873ebd32b0b9a4d9c7)) - - - - - -## 4.44.2 (2022-02-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.44.1 (2022-02-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.44.0 (2022-02-14) - - -### Features - -* **Page:** Added center alignment for page sections ([#6893](https://github.com/patternfly/patternfly-react/issues/6893)) ([440918f](https://github.com/patternfly/patternfly-react/commit/440918fc1bd9795cd916a04fe32677ae5f69ef68)) - - - - - -# 4.43.0 (2022-02-11) - - -### Features - -* **Menu:** allow drilldown menu functions ([#6872](https://github.com/patternfly/patternfly-react/issues/6872)) ([b345b07](https://github.com/patternfly/patternfly-react/commit/b345b07de7c1576e984a06f4c573641b04956f5c)) - - - - - -## 4.42.3 (2022-02-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.42.2 (2022-02-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.42.1 (2022-02-11) - - -### Bug Fixes - -* **Select:** Fixed so that view more btn click does not close the menu in React 16 ([#6922](https://github.com/patternfly/patternfly-react/issues/6922)) ([89da91d](https://github.com/patternfly/patternfly-react/commit/89da91dfd3a9e7af8ee26f8b6b5ac01c5b2487d4)) - - - - - -# 4.42.0 (2022-02-10) - - -### Features - -* **ToolTip:** Diagonal tooltip placement ([#6887](https://github.com/patternfly/patternfly-react/issues/6887)) ([897fd7d](https://github.com/patternfly/patternfly-react/commit/897fd7d248888e7324d36f574231985e8523a700)) - - - - - -## 4.41.3 (2022-02-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.41.2 (2022-02-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.41.1 (2022-02-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.41.0 (2022-02-08) - - -### Features - -* **MenuToggle:** add full height variation ([#6869](https://github.com/patternfly/patternfly-react/issues/6869)) ([415e02f](https://github.com/patternfly/patternfly-react/commit/415e02f5e5617367db717cd5120df04ec1a208eb)) - - - - - -# 4.40.0 (2022-02-08) - - -### Features - -* **Table:** add striping ([#6886](https://github.com/patternfly/patternfly-react/issues/6886)) ([47abda7](https://github.com/patternfly/patternfly-react/commit/47abda7831e21c58051b90982f02cb48f7a22a22)) - - - - - -## 4.39.21 (2022-02-07) - - -### Bug Fixes - -* **TimePicker:** apply includeSeconds when making options ([#6865](https://github.com/patternfly/patternfly-react/issues/6865)) ([5b6d6c9](https://github.com/patternfly/patternfly-react/commit/5b6d6c9979046c111b00456622758f542627ac11)) - - - - - -## 4.39.20 (2022-02-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.39.19 (2022-02-07) - - -### Bug Fixes - -* **Select:** remove logic from default inputAutoComplete ([#6873](https://github.com/patternfly/patternfly-react/issues/6873)) ([b3b61c1](https://github.com/patternfly/patternfly-react/commit/b3b61c175f23cdc9dad8c71054301d1090795ede)) - - - - - -## 4.39.18 (2022-02-04) - - -### Bug Fixes - -* **TimePicker:** remove automatically validation from onChange event ([#6884](https://github.com/patternfly/patternfly-react/issues/6884)) ([e7088e4](https://github.com/patternfly/patternfly-react/commit/e7088e4e7a9348fa412d2815af1b0820ee7754ef)) - - - - - -## 4.39.17 (2022-02-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.39.16 (2022-02-02) - - -### Bug Fixes - -* **numberinput:** import input group component instead ([#6850](https://github.com/patternfly/patternfly-react/issues/6850)) ([2a94545](https://github.com/patternfly/patternfly-react/commit/2a94545ead3be3ea3c987b1273e18b943315c36e)) - - - - - -## 4.39.15 (2022-01-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.39.14 (2022-01-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.39.13 (2022-01-26) - - -### Reverts - -* Revert "Improve IAction type (#6108)" (#6862) ([94aea84](https://github.com/patternfly/patternfly-react/commit/94aea84036e26f4cc472b7d445ee49b088eb6a47)), closes [#6108](https://github.com/patternfly/patternfly-react/issues/6108) [#6862](https://github.com/patternfly/patternfly-react/issues/6862) - - - - - -## 4.39.12 (2022-01-26) - - -### Bug Fixes - -* **OverflowMenu:** ignore menu being covered in intg. tests ([#6852](https://github.com/patternfly/patternfly-react/issues/6852)) ([066e2bb](https://github.com/patternfly/patternfly-react/commit/066e2bb994f4eca5538fb9287e5d10ddf4a30cac)) - - - - - -## 4.39.11 (2022-01-26) - - -### Reverts - -* Revert "feat(Tabs): enforce restricted type for children (#6767)" (#6857) ([eca9a70](https://github.com/patternfly/patternfly-react/commit/eca9a708e8d53416e60a790ea876aa0b2e398212)), closes [#6767](https://github.com/patternfly/patternfly-react/issues/6767) [#6857](https://github.com/patternfly/patternfly-react/issues/6857) - - - - - -## 4.39.10 (2022-01-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.39.9 (2022-01-25) - - -### Bug Fixes - -* **Select:** Footer keyboard bugs ([#6844](https://github.com/patternfly/patternfly-react/issues/6844)) ([7f06125](https://github.com/patternfly/patternfly-react/commit/7f06125cfb52884708107da82ca3800207c9846f)) - - - - - -## 4.39.8 (2022-01-24) - - -### Bug Fixes - -* **table:** fixed action example ([#6800](https://github.com/patternfly/patternfly-react/issues/6800)) ([eaaedc2](https://github.com/patternfly/patternfly-react/commit/eaaedc28cf54cca1a47aaa5c4f5f76a11d32864d)) - - - - - -## 4.39.7 (2022-01-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.39.6 (2022-01-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.39.5 (2022-01-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.39.4 (2022-01-20) - - -### Bug Fixes - -* **DatePicker:** update empty state validation and add onblur event ([#6822](https://github.com/patternfly/patternfly-react/issues/6822)) ([258e818](https://github.com/patternfly/patternfly-react/commit/258e81861adc0488ae42f349aff78f06f2874fa7)) - - - - - -## 4.39.3 (2022-01-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.39.2 (2022-01-20) - - -### Bug Fixes - -* **Select:** Fixed dot next to the spinner in grouped view more variant ([#6831](https://github.com/patternfly/patternfly-react/issues/6831)) ([ccc81b4](https://github.com/patternfly/patternfly-react/commit/ccc81b4c8c30506f28e61e73dcbc106da50ca692)) - - - - - -## 4.39.1 (2022-01-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.39.0 (2022-01-20) - - -### Features - -* **Truncate:** added Truncate component ([#6713](https://github.com/patternfly/patternfly-react/issues/6713)) ([c803b5d](https://github.com/patternfly/patternfly-react/commit/c803b5df3761f689172d79bbc71bc38623b0bf5a)) - - - - - -## 4.38.6 (2022-01-20) - - -### Bug Fixes - -* **TextInputGroup:** address various issues ([#6774](https://github.com/patternfly/patternfly-react/issues/6774)) ([010058a](https://github.com/patternfly/patternfly-react/commit/010058acc7115fb76a35fe06634083ada62cece0)) - - - - - -## 4.38.5 (2022-01-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.38.4 (2022-01-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.38.3 (2022-01-19) - - -### Bug Fixes - -* **examples:** amend row index in tree table examples ([#6830](https://github.com/patternfly/patternfly-react/issues/6830)) ([e676fb1](https://github.com/patternfly/patternfly-react/commit/e676fb1171618e957a4564af31c15ca6e3800507)), closes [#6719](https://github.com/patternfly/patternfly-react/issues/6719) - - - - - -## 4.38.2 (2022-01-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.38.1 (2022-01-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.38.0 (2022-01-19) - - -### Features - -* **NumberInput:** call onMinus/onPlus on arrow-up/down pressed ([#6764](https://github.com/patternfly/patternfly-react/issues/6764)) ([545a7f8](https://github.com/patternfly/patternfly-react/commit/545a7f8791dbf2937416509a01b197cc1daf80db)) - - - - - -# 4.37.0 (2022-01-19) - - -### Features - -* **TimePicker:** Allow for seconds via new prop; includeSeconds ([#6769](https://github.com/patternfly/patternfly-react/issues/6769)) ([417b51a](https://github.com/patternfly/patternfly-react/commit/417b51a6b8bd997042e16a0e821fb63281e53d30)) - - - - - -## 4.36.5 (2022-01-18) - - -### Bug Fixes - -* **Tabs:** enable tabs scroll button for small window ([#6784](https://github.com/patternfly/patternfly-react/issues/6784)) ([a29b430](https://github.com/patternfly/patternfly-react/commit/a29b43094ae3d5ce7f4b26e4041cd595e675ee58)) - - - - - -## 4.36.4 (2022-01-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.36.3 (2022-01-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.36.2 (2022-01-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.36.1 (2022-01-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.36.0 (2022-01-17) - - -### Features - -* **Tabs:** enforce restricted type for children ([#6767](https://github.com/patternfly/patternfly-react/issues/6767)) ([0d224df](https://github.com/patternfly/patternfly-react/commit/0d224dfb71b1a89c5783bd9ea290ece2f325ad21)) - - - - - -## 4.35.1 (2022-01-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.35.0 (2022-01-14) - - -### Features - -* **DescriptionList:** add option to fill columns first ([#6736](https://github.com/patternfly/patternfly-react/issues/6736)) ([c955c29](https://github.com/patternfly/patternfly-react/commit/c955c2917dbc4b85ce58fac4f93845c429186e1b)) - - - - - -## 4.34.2 (2022-01-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.34.1 (2022-01-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.34.0 (2022-01-12) - - -### Features - -* **expandable-section:** added indented variation ([#6763](https://github.com/patternfly/patternfly-react/issues/6763)) ([703b922](https://github.com/patternfly/patternfly-react/commit/703b9224e43bedd5b37ec41d8f26f2939836d610)) - - - - - -## 4.33.1 (2022-01-11) - - -### Bug Fixes - -* **Select:** update typeahead Select children when any option attribute changes ([#6747](https://github.com/patternfly/patternfly-react/issues/6747)) ([1e03f3c](https://github.com/patternfly/patternfly-react/commit/1e03f3c6d0a7c507e33398c98863e40bb2233a62)) - - - - - -# 4.33.0 (2022-01-11) - - -### Features - -* **ToggleGroup:** support disabling all items under the parent ([#6700](https://github.com/patternfly/patternfly-react/issues/6700)) ([a60c8f3](https://github.com/patternfly/patternfly-react/commit/a60c8f3485546c797750451714a70b7e84a4ba0f)) - - - - - -## 4.32.1 (2022-01-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.32.0 (2022-01-11) - - -### Features - -* **Table:** update clickable area for checks/radios ([#6754](https://github.com/patternfly/patternfly-react/issues/6754)) ([c4f3c2d](https://github.com/patternfly/patternfly-react/commit/c4f3c2d7f515e3d6ad73d8b52238ca426281469a)) - - - - - -## 4.31.2 (2022-01-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.31.1 (2022-01-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.31.0 (2022-01-10) - - -### Features - -* **Dropdown:** add plain-text variant support ([#6721](https://github.com/patternfly/patternfly-react/issues/6721)) ([e5000e3](https://github.com/patternfly/patternfly-react/commit/e5000e36194e36b9c6ae49efdb0a513125efcb70)) - - - - - -## 4.30.11 (2022-01-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.30.10 (2022-01-10) - - -### Bug Fixes - -* **Tabs:** allow href navigation from tabs ([#6755](https://github.com/patternfly/patternfly-react/issues/6755)) ([290d89a](https://github.com/patternfly/patternfly-react/commit/290d89aed2dd4517db9859cc80ef2745cb8a779b)) - - - - - -## 4.30.9 (2022-01-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.30.8 (2022-01-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.30.7 (2022-01-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.30.6 (2022-01-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.30.5 (2022-01-07) - - -### Bug Fixes - -* **jumplinks:** Updated JumpLinks demo to allow for horizontal display ([#6731](https://github.com/patternfly/patternfly-react/issues/6731)) ([f37b934](https://github.com/patternfly/patternfly-react/commit/f37b9342e678da247056c73767d5d40ff5435bda)) - - - - - -## 4.30.4 (2022-01-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.30.3 (2022-01-06) - - -### Bug Fixes - -* **TopologyControlBar:** Update screen reader className to latest ([#6739](https://github.com/patternfly/patternfly-react/issues/6739)) ([ed9da57](https://github.com/patternfly/patternfly-react/commit/ed9da575fddf9fe7af8a891972f7a66520785411)) - - - - - -## 4.30.2 (2022-01-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.30.1 (2022-01-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.30.0 (2022-01-05) - - -### Features - -* **Table:** allow a generic to be passed for cell props ([#6691](https://github.com/patternfly/patternfly-react/issues/6691)) ([e22c7be](https://github.com/patternfly/patternfly-react/commit/e22c7bebf630b7cd71e4dc434c593b69fa2fb2c8)) - - - - - -## 4.29.3 (2022-01-04) - - -### Bug Fixes - -* **docs:** fix broken theme-patternfly-org link ([#6726](https://github.com/patternfly/patternfly-react/issues/6726)) ([4ba15e9](https://github.com/patternfly/patternfly-react/commit/4ba15e9d9611afbb80d995e4d63f5478c4212a9e)) - - - - - -## 4.29.2 (2022-01-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.29.1 (2022-01-04) - - -### Bug Fixes - -* **OverflowMenu:** pass HTMLDivElements props to group and control divs ([#6674](https://github.com/patternfly/patternfly-react/issues/6674)) ([e6d0d64](https://github.com/patternfly/patternfly-react/commit/e6d0d6406a07de04f4b232ca9a21247c0e9746c0)) - - - - - -# 4.29.0 (2021-12-22) - - -### Features - -* **Toolbar:** support customizing text in ToolbarChipGroupContent ([#6694](https://github.com/patternfly/patternfly-react/issues/6694)) ([24266ad](https://github.com/patternfly/patternfly-react/commit/24266adf569c027574abd1503b5e46974220349a)) - - - - - -## 4.28.5 (2021-12-16) - - -### Bug Fixes - -* **LogViewer:** fix the issue that scrollbar could compress the content of the logs ([#6702](https://github.com/patternfly/patternfly-react/issues/6702)) ([11aab1f](https://github.com/patternfly/patternfly-react/commit/11aab1f71a1aa9959cf14b887ab55b845a794a00)) - - - - - -## 4.28.4 (2021-12-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.28.3 (2021-12-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.28.2 (2021-12-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.28.1 (2021-12-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.28.0 (2021-12-09) - - -### Features - -* **Popover:** add composable header and alert variants ([#6664](https://github.com/patternfly/patternfly-react/issues/6664)) ([9028e8b](https://github.com/patternfly/patternfly-react/commit/9028e8ba5d674bde6a7e29532f7926e200dd632a)) - - - - - -## 4.27.1 (2021-12-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.27.0 (2021-12-08) - - -### Features - -* **DualListSelector:** add composable tree example ([#6652](https://github.com/patternfly/patternfly-react/issues/6652)) ([5fe977b](https://github.com/patternfly/patternfly-react/commit/5fe977becb5dea615724abf846f315e50931c188)) - - - - - -## 4.26.1 (2021-12-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.26.0 (2021-12-06) - - -### Features - -* **Card:** Add disabled card and clean up props ([#6659](https://github.com/patternfly/patternfly-react/issues/6659)) ([86f225a](https://github.com/patternfly/patternfly-react/commit/86f225ab2e02d617e2d380c4a7f7593037c50e84)) - - - - - -# 4.25.0 (2021-12-06) - - -### Features - -* **MenuToggle:** add plain with text variant ([#6627](https://github.com/patternfly/patternfly-react/issues/6627)) ([1f4ca5e](https://github.com/patternfly/patternfly-react/commit/1f4ca5e36d7077da3ff3e6918874048c784216e0)) - - - - - -# 4.24.0 (2021-12-06) - - -### Features - -* **Dropdown:** add toggle variants ([#6651](https://github.com/patternfly/patternfly-react/issues/6651)) ([6414309](https://github.com/patternfly/patternfly-react/commit/64143094aec86aed86adb320e059d987af4f5f24)) - - - - - -## 4.23.1 (2021-12-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.23.0 (2021-12-03) - - -### Features - -* **Select:** add ability to persist filtered children state ([#6670](https://github.com/patternfly/patternfly-react/issues/6670)) ([f618577](https://github.com/patternfly/patternfly-react/commit/f618577582e389409978bd1d6512ca0cf5d855cf)) - - - - - -## 4.22.17 (2021-12-03) - - -### Bug Fixes - -* **Slider:** fixed examples with custom steps and input ([#6662](https://github.com/patternfly/patternfly-react/issues/6662)) ([b4cab38](https://github.com/patternfly/patternfly-react/commit/b4cab38a2492564bf91e3711ce322951bcc6a051)) - - - - - -## 4.22.16 (2021-12-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.22.15 (2021-12-02) - - -### Bug Fixes - -* **Tile:** fix selecting tile in tile demo ([#6653](https://github.com/patternfly/patternfly-react/issues/6653)) ([e12e44d](https://github.com/patternfly/patternfly-react/commit/e12e44d4b623de305b7df04174144a9496d282a7)) - - - - - -## 4.22.14 (2021-12-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.22.13 (2021-11-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.22.12 (2021-11-30) - - -### Bug Fixes - -* **action-list:** added support for classname ([#6647](https://github.com/patternfly/patternfly-react/issues/6647)) ([dd3d2ce](https://github.com/patternfly/patternfly-react/commit/dd3d2ce32b4d3e7562faf465abdc508e17f097d9)) - - - - - -## 4.22.11 (2021-11-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.22.10 (2021-11-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.22.9 (2021-11-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.22.8 (2021-11-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.22.7 (2021-11-18) - - -### Bug Fixes - -* **pagination:** updated toggleTemplate prop description to include ofWord prop ([#6622](https://github.com/patternfly/patternfly-react/issues/6622)) ([26733a6](https://github.com/patternfly/patternfly-react/commit/26733a6a256ad0e873afbc268a712027470fdeaa)) - - - - - -## 4.22.6 (2021-11-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.22.5 (2021-11-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.22.4 (2021-11-15) - - -### Bug Fixes - -* **FileUpload:** Downgrade react-dropzone back to 9.0.0 to avoid a breaking type change, fix behavior regressions ([#6610](https://github.com/patternfly/patternfly-react/issues/6610)) ([574bf4f](https://github.com/patternfly/patternfly-react/commit/574bf4ff3ccf7f67ce750bc48067eaf826e99990)) - - - - - -## 4.22.3 (2021-11-15) - - -### Bug Fixes - -* **Menu:** allow maxMenuHeight with Scrollabe ([#6608](https://github.com/patternfly/patternfly-react/issues/6608)) ([8c1f12c](https://github.com/patternfly/patternfly-react/commit/8c1f12c2b0e86bbc5ba1071db3ebf29fee7421a0)) - - - - - -## 4.22.2 (2021-11-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.22.1 (2021-11-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.22.0 (2021-11-12) - - -### Features - -* **card:** added hoverable/selectable/selected-raised variant ([#6565](https://github.com/patternfly/patternfly-react/issues/6565)) ([8c60568](https://github.com/patternfly/patternfly-react/commit/8c60568ba4fa18398fed636710e222ce506de82c)) - - - - - -## 4.21.2 (2021-11-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.21.1 (2021-11-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.21.0 (2021-11-11) - - -### Features - -* **ComposableTable:** add sticky columns and nested headers ([#6538](https://github.com/patternfly/patternfly-react/issues/6538)) ([f11245b](https://github.com/patternfly/patternfly-react/commit/f11245bfccc8c6c02a9d5545a69ed533743cc552)) - - - - - -# 4.20.0 (2021-11-11) - - -### Features - -* **contextselector:** added support for context selector items as links ([#6554](https://github.com/patternfly/patternfly-react/issues/6554)) ([c465388](https://github.com/patternfly/patternfly-react/commit/c4653881eee0cd8ec8e3a7125bbef0bded9f2de0)) - - - - - -# 4.19.0 (2021-11-11) - - -### Features - -* **Navigation:** Added exemple with third level ([#6564](https://github.com/patternfly/patternfly-react/issues/6564)) ([c30da53](https://github.com/patternfly/patternfly-react/commit/c30da532855118f705c8cfc87c545bb1eea11ebb)) - - - - - -# 4.18.0 (2021-11-11) - - -### Features - -* enhance type correctness of CodeEditor ([#6579](https://github.com/patternfly/patternfly-react/issues/6579)) ([e1ad65c](https://github.com/patternfly/patternfly-react/commit/e1ad65c225968d5a9c74019d19e4a3c5e2666926)) - - - - - -## 4.17.4 (2021-11-10) - - -### Bug Fixes - -* **jumplinks:** fixed to always set clicked item as active ([#6542](https://github.com/patternfly/patternfly-react/issues/6542)) ([845c98f](https://github.com/patternfly/patternfly-react/commit/845c98f5f3df8aa9b6acc190707c5f1d7bf3ca38)) - - - - - -## 4.17.3 (2021-11-10) - - -### Bug Fixes - -* **Menu:** stop passing disableHover to DrilldownMenu DOM ([#6571](https://github.com/patternfly/patternfly-react/issues/6571)) ([63dcf25](https://github.com/patternfly/patternfly-react/commit/63dcf256723848ff3789828fc0a5f86d5009fc87)) - - - - - -## 4.17.2 (2021-11-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.17.1 (2021-11-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.17.0 (2021-11-09) - - -### Features - -* **Table:** set default sort direction ([#6544](https://github.com/patternfly/patternfly-react/issues/6544)) ([9ee4942](https://github.com/patternfly/patternfly-react/commit/9ee49428c8e1041721f2a09f8176a5aba3335049)) - - - - - -## 4.16.4 (2021-11-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.16.3 (2021-11-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.16.2 (2021-11-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.16.1 (2021-11-08) - - -### Bug Fixes - -* **acccessconsoles:** use object type Select options values in order to not mix displayed text with option keys ([#6496](https://github.com/patternfly/patternfly-react/issues/6496)) ([975c8e1](https://github.com/patternfly/patternfly-react/commit/975c8e14d7ea8c53eb4048ea6ef73e804b3ad2be)) - - - - - -# 4.16.0 (2021-11-04) - - -### Features - -* **log-viewer:** support ANSI color ([#6519](https://github.com/patternfly/patternfly-react/issues/6519)) ([936a699](https://github.com/patternfly/patternfly-react/commit/936a699b0514a492d3c40be08932fb7bab275cce)) - - - - - -## 4.15.11 (2021-11-01) - - -### Bug Fixes - -* **AboutModal:** allow to disable FocusTrap ([#6509](https://github.com/patternfly/patternfly-react/issues/6509)) ([72536e1](https://github.com/patternfly/patternfly-react/commit/72536e1f73641ff3f19f865f08dbb41ad0ee7b9f)) - - - - - -## 4.15.10 (2021-10-29) - - -### Bug Fixes - -* **Banner:** forward props ([#6511](https://github.com/patternfly/patternfly-react/issues/6511)) ([e36c890](https://github.com/patternfly/patternfly-react/commit/e36c89077afa82340994c0e3c0fc929e601e01bc)) - - - - - -## 4.15.9 (2021-10-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.15.8 (2021-10-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.15.7 (2021-10-27) - - -### Bug Fixes - -* change transformer cjs package to private ([#6515](https://github.com/patternfly/patternfly-react/issues/6515)) ([efcb357](https://github.com/patternfly/patternfly-react/commit/efcb3573b71541328ce2b16caa80ce33b2a62131)) - - - - - -## 4.15.6 (2021-10-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.15.5 (2021-10-26) - - -### Bug Fixes - -* **tokens:** added check for no matching var to avoid infinite loop ([#6502](https://github.com/patternfly/patternfly-react/issues/6502)) ([99605c2](https://github.com/patternfly/patternfly-react/commit/99605c213f12490d0abe75910e05c3e6da26a1f3)) - - - - - -## 4.15.4 (2021-10-26) - - -### Bug Fixes - -* add transformer package ([#6507](https://github.com/patternfly/patternfly-react/issues/6507)) ([daffd28](https://github.com/patternfly/patternfly-react/commit/daffd2864388abe63e625f962a8b38c2b7056209)) - - - - - -## 4.15.3 (2021-10-26) - - -### Bug Fixes - -* **transformer:** publish transformer in patternfly org ([#6506](https://github.com/patternfly/patternfly-react/issues/6506)) ([b739af3](https://github.com/patternfly/patternfly-react/commit/b739af318400b41d4e9a53bdff6232ecc176916e)) - - - - - -## 4.15.2 (2021-10-26) - - -### Bug Fixes - -* **readme:** update react-core readme ([#6505](https://github.com/patternfly/patternfly-react/issues/6505)) ([d4f9a11](https://github.com/patternfly/patternfly-react/commit/d4f9a114584eea7ab67873f199e80b348886e14b)) - - - - - -## 4.15.1 (2021-10-26) - - -### Bug Fixes - -* **DualListSelector:** account for duplicate folders ([#6499](https://github.com/patternfly/patternfly-react/issues/6499)) ([e531e68](https://github.com/patternfly/patternfly-react/commit/e531e68e7adc58459b3630f5c915ed69e3021012)) - - - - - -# 4.15.0 (2021-10-26) - - -### Features - -* **toolbar:** add sticky top modifier to toolbar ([#6447](https://github.com/patternfly/patternfly-react/issues/6447)) ([fe7605a](https://github.com/patternfly/patternfly-react/commit/fe7605a67428b43ec00b3cb2117270296576737c)) - - - - - -## 4.14.1 (2021-10-26) - - -### Bug Fixes - -* **types:** SelectOptionProp made optional ([#6503](https://github.com/patternfly/patternfly-react/issues/6503)) ([716ac80](https://github.com/patternfly/patternfly-react/commit/716ac80e2414507d589ee3002fc0cea0068ae59c)) - - - - - -# 4.14.0 (2021-10-26) - - -### Features - -* **TextInputGroup:** add text input group ([#6482](https://github.com/patternfly/patternfly-react/issues/6482)) ([a02fd4f](https://github.com/patternfly/patternfly-react/commit/a02fd4fe3345245b2252ee5a261f5b1460490642)), closes [patternfly/patternfly-react#6409](https://github.com/patternfly/patternfly-react/issues/6409) - - - - - -## 4.13.4 (2021-10-26) - - -### Bug Fixes - -* **KebabToggle:** adds event to onToggle definition ([#6490](https://github.com/patternfly/patternfly-react/issues/6490)) ([0441575](https://github.com/patternfly/patternfly-react/commit/04415757917062aa13c06b34bd94ef38c2334088)) - - - - - -## 4.13.3 (2021-10-26) - - -### Bug Fixes - -* **Modal:** test clean up ([#6489](https://github.com/patternfly/patternfly-react/issues/6489)) ([c8eaa7c](https://github.com/patternfly/patternfly-react/commit/c8eaa7c838fbedb98ea0f38e4f535488040a72e2)) - - - - - -## 4.13.2 (2021-10-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.13.1 (2021-10-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.13.0 (2021-10-25) - - -### Features - -* **Tabs:** Added support for tab content body with padding, added tabs open and tab secondary tabs demos ([#6484](https://github.com/patternfly/patternfly-react/issues/6484)) ([0ccbe9d](https://github.com/patternfly/patternfly-react/commit/0ccbe9d1e6e0dac0730466c92a90fe2cd9f6560d)) - - - - - -## 4.12.1 (2021-10-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# 4.12.0 (2021-10-21) - - -### Features - -* **label:** added compact label, updated horizontal grid card demo ([#6448](https://github.com/patternfly/patternfly-react/issues/6448)) ([89e0431](https://github.com/patternfly/patternfly-react/commit/89e04317924282140606d45f2292aa3f658b4b6c)) - - - - - -## 4.11.1 (2021-10-21) - - -### Bug Fixes - -* **DescriptionListGroup:** forward props to DOM ([#6466](https://github.com/patternfly/patternfly-react/issues/6466)) ([b78e2aa](https://github.com/patternfly/patternfly-react/commit/b78e2aa9c0360ce8418f6e7b55274ea1a50de518)) - - - - - -# 4.11.0 (2021-10-20) - - -### Features - -* **Progress:** allow node titles ([#6470](https://github.com/patternfly/patternfly-react/issues/6470)) ([46d5252](https://github.com/patternfly/patternfly-react/commit/46d52523ad5111bb11729c2750abe9aeb35d9326)) - - - - - -# 4.10.0 (2021-10-20) - - -### Features - -* **DualListSelector:** add disabled flag ([#6442](https://github.com/patternfly/patternfly-react/issues/6442)) ([85e1314](https://github.com/patternfly/patternfly-react/commit/85e131435be12c2df79336e9fa56987ed3717417)) - - - - - -## 4.9.109 (2021-10-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## 4.9.108 (2021-10-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.107](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.106...@patternfly/react-topology@4.9.107) (2021-10-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.106](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.105...@patternfly/react-topology@4.9.106) (2021-10-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.105](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.104...@patternfly/react-topology@4.9.105) (2021-10-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.104](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.103...@patternfly/react-topology@4.9.104) (2021-10-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.103](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.102...@patternfly/react-topology@4.9.103) (2021-10-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.102](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.101...@patternfly/react-topology@4.9.102) (2021-10-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.101](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.100...@patternfly/react-topology@4.9.101) (2021-10-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.100](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.99...@patternfly/react-topology@4.9.100) (2021-10-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.99](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.98...@patternfly/react-topology@4.9.99) (2021-10-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.98](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.97...@patternfly/react-topology@4.9.98) (2021-10-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.97](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.96...@patternfly/react-topology@4.9.97) (2021-10-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.96](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.95...@patternfly/react-topology@4.9.96) (2021-10-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.95](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.94...@patternfly/react-topology@4.9.95) (2021-10-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.94](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.93...@patternfly/react-topology@4.9.94) (2021-10-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.93](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.92...@patternfly/react-topology@4.9.93) (2021-10-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.92](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.91...@patternfly/react-topology@4.9.92) (2021-10-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.91](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.90...@patternfly/react-topology@4.9.91) (2021-10-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.90](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.89...@patternfly/react-topology@4.9.90) (2021-10-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.89](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.88...@patternfly/react-topology@4.9.89) (2021-10-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.88](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.87...@patternfly/react-topology@4.9.88) (2021-10-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.87](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.86...@patternfly/react-topology@4.9.87) (2021-09-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.86](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.85...@patternfly/react-topology@4.9.86) (2021-09-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.85](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.84...@patternfly/react-topology@4.9.85) (2021-09-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.84](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.83...@patternfly/react-topology@4.9.84) (2021-09-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.83](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.82...@patternfly/react-topology@4.9.83) (2021-09-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.82](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.81...@patternfly/react-topology@4.9.82) (2021-09-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.81](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.80...@patternfly/react-topology@4.9.81) (2021-09-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.80](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.79...@patternfly/react-topology@4.9.80) (2021-09-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.79](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.78...@patternfly/react-topology@4.9.79) (2021-09-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.78](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.77...@patternfly/react-topology@4.9.78) (2021-09-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.77](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.76...@patternfly/react-topology@4.9.77) (2021-09-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.76](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.75...@patternfly/react-topology@4.9.76) (2021-09-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.75](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.74...@patternfly/react-topology@4.9.75) (2021-09-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.74](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.73...@patternfly/react-topology@4.9.74) (2021-09-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.73](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.72...@patternfly/react-topology@4.9.73) (2021-09-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.72](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.71...@patternfly/react-topology@4.9.72) (2021-09-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.71](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.70...@patternfly/react-topology@4.9.71) (2021-09-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.70](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.69...@patternfly/react-topology@4.9.70) (2021-09-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.69](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.68...@patternfly/react-topology@4.9.69) (2021-09-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.68](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.67...@patternfly/react-topology@4.9.68) (2021-09-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.67](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.66...@patternfly/react-topology@4.9.67) (2021-09-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.66](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.65...@patternfly/react-topology@4.9.66) (2021-09-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.65](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.64...@patternfly/react-topology@4.9.65) (2021-08-31) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.64](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.63...@patternfly/react-topology@4.9.64) (2021-08-31) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.63](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.62...@patternfly/react-topology@4.9.63) (2021-08-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.62](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.61...@patternfly/react-topology@4.9.62) (2021-08-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.61](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.60...@patternfly/react-topology@4.9.61) (2021-08-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.60](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.59...@patternfly/react-topology@4.9.60) (2021-08-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.59](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.58...@patternfly/react-topology@4.9.59) (2021-08-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.58](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.57...@patternfly/react-topology@4.9.58) (2021-08-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.57](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.56...@patternfly/react-topology@4.9.57) (2021-08-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.56](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.55...@patternfly/react-topology@4.9.56) (2021-08-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.55](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.54...@patternfly/react-topology@4.9.55) (2021-08-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.54](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.53...@patternfly/react-topology@4.9.54) (2021-08-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.53](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.52...@patternfly/react-topology@4.9.53) (2021-08-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.52](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.51...@patternfly/react-topology@4.9.52) (2021-08-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.51](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.50...@patternfly/react-topology@4.9.51) (2021-08-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.50](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.49...@patternfly/react-topology@4.9.50) (2021-08-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.49](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.48...@patternfly/react-topology@4.9.49) (2021-08-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.48](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.47...@patternfly/react-topology@4.9.48) (2021-08-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.47](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.46...@patternfly/react-topology@4.9.47) (2021-08-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.46](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.45...@patternfly/react-topology@4.9.46) (2021-08-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.45](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.44...@patternfly/react-topology@4.9.45) (2021-08-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.44](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.43...@patternfly/react-topology@4.9.44) (2021-08-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.43](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.42...@patternfly/react-topology@4.9.43) (2021-08-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.41...@patternfly/react-topology@4.9.42) (2021-08-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.40...@patternfly/react-topology@4.9.41) (2021-08-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.40](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.39...@patternfly/react-topology@4.9.40) (2021-08-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.38...@patternfly/react-topology@4.9.39) (2021-08-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.37...@patternfly/react-topology@4.9.38) (2021-07-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.36...@patternfly/react-topology@4.9.37) (2021-07-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.35...@patternfly/react-topology@4.9.36) (2021-07-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.34...@patternfly/react-topology@4.9.35) (2021-07-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.33...@patternfly/react-topology@4.9.34) (2021-07-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.32...@patternfly/react-topology@4.9.33) (2021-07-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.31...@patternfly/react-topology@4.9.32) (2021-07-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.30...@patternfly/react-topology@4.9.31) (2021-07-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.29...@patternfly/react-topology@4.9.30) (2021-07-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.28...@patternfly/react-topology@4.9.29) (2021-07-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.27...@patternfly/react-topology@4.9.28) (2021-07-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.26...@patternfly/react-topology@4.9.27) (2021-07-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.25...@patternfly/react-topology@4.9.26) (2021-07-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.24...@patternfly/react-topology@4.9.25) (2021-07-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.23...@patternfly/react-topology@4.9.24) (2021-07-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.22...@patternfly/react-topology@4.9.23) (2021-07-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.21...@patternfly/react-topology@4.9.22) (2021-07-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.20...@patternfly/react-topology@4.9.21) (2021-07-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.19...@patternfly/react-topology@4.9.20) (2021-07-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.18...@patternfly/react-topology@4.9.19) (2021-07-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.17...@patternfly/react-topology@4.9.18) (2021-07-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.16...@patternfly/react-topology@4.9.17) (2021-07-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.15...@patternfly/react-topology@4.9.16) (2021-07-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.14...@patternfly/react-topology@4.9.15) (2021-07-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.13...@patternfly/react-topology@4.9.14) (2021-07-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.12...@patternfly/react-topology@4.9.13) (2021-07-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.11...@patternfly/react-topology@4.9.12) (2021-07-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.10...@patternfly/react-topology@4.9.11) (2021-07-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.9...@patternfly/react-topology@4.9.10) (2021-07-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.8...@patternfly/react-topology@4.9.9) (2021-06-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.7...@patternfly/react-topology@4.9.8) (2021-06-30) - - -### Bug Fixes - -* **ci:** change master branch to main ([4ac4129](https://github.com/patternfly/patternfly-react/commit/4ac4129e8da9a37367ea7612019f8d7af1ed8836)) - - - - - -## [4.9.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.6...@patternfly/react-topology@4.9.7) (2021-06-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.5...@patternfly/react-topology@4.9.6) (2021-06-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.4...@patternfly/react-topology@4.9.5) (2021-06-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.3...@patternfly/react-topology@4.9.4) (2021-06-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.2...@patternfly/react-topology@4.9.3) (2021-06-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.1...@patternfly/react-topology@4.9.2) (2021-06-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.9.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.9.0...@patternfly/react-topology@4.9.1) (2021-06-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [4.9.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.81...@patternfly/react-topology@4.9.0) (2021-06-17) - - -### Features - -* **DualListSelector:** add tooltips to control buttons ([#5914](https://github.com/patternfly/patternfly-react/issues/5914)) ([1292479](https://github.com/patternfly/patternfly-react/commit/1292479e121f4eeaadb2f6954b24b0e68551dcd3)) - - - - - -## [4.8.81](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.80...@patternfly/react-topology@4.8.81) (2021-06-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.80](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.79...@patternfly/react-topology@4.8.80) (2021-06-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.79](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.78...@patternfly/react-topology@4.8.79) (2021-06-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.78](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.77...@patternfly/react-topology@4.8.78) (2021-06-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.77](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.76...@patternfly/react-topology@4.8.77) (2021-06-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.76](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.75...@patternfly/react-topology@4.8.76) (2021-06-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.75](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.74...@patternfly/react-topology@4.8.75) (2021-06-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.74](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.73...@patternfly/react-topology@4.8.74) (2021-06-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.73](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.72...@patternfly/react-topology@4.8.73) (2021-06-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.72](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.71...@patternfly/react-topology@4.8.72) (2021-06-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.71](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.70...@patternfly/react-topology@4.8.71) (2021-06-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.70](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.69...@patternfly/react-topology@4.8.70) (2021-06-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.69](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.68...@patternfly/react-topology@4.8.69) (2021-06-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.68](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.67...@patternfly/react-topology@4.8.68) (2021-06-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.67](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.66...@patternfly/react-topology@4.8.67) (2021-06-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.66](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.65...@patternfly/react-topology@4.8.66) (2021-05-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.65](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.64...@patternfly/react-topology@4.8.65) (2021-05-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.64](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.63...@patternfly/react-topology@4.8.64) (2021-05-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.63](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.62...@patternfly/react-topology@4.8.63) (2021-05-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.62](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.61...@patternfly/react-topology@4.8.62) (2021-05-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.61](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.60...@patternfly/react-topology@4.8.61) (2021-05-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.60](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.59...@patternfly/react-topology@4.8.60) (2021-05-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.59](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.58...@patternfly/react-topology@4.8.59) (2021-05-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.58](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.57...@patternfly/react-topology@4.8.58) (2021-05-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.57](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.56...@patternfly/react-topology@4.8.57) (2021-05-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.56](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.55...@patternfly/react-topology@4.8.56) (2021-05-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.55](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.54...@patternfly/react-topology@4.8.55) (2021-05-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.54](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.53...@patternfly/react-topology@4.8.54) (2021-05-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.53](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.52...@patternfly/react-topology@4.8.53) (2021-05-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.52](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.51...@patternfly/react-topology@4.8.52) (2021-05-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.51](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.50...@patternfly/react-topology@4.8.51) (2021-05-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.50](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.49...@patternfly/react-topology@4.8.50) (2021-05-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.49](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.48...@patternfly/react-topology@4.8.49) (2021-05-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.48](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.47...@patternfly/react-topology@4.8.48) (2021-05-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.47](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.46...@patternfly/react-topology@4.8.47) (2021-05-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.46](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.45...@patternfly/react-topology@4.8.46) (2021-05-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.45](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.44...@patternfly/react-topology@4.8.45) (2021-05-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.44](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.43...@patternfly/react-topology@4.8.44) (2021-05-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.43](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.42...@patternfly/react-topology@4.8.43) (2021-05-05) - - -### Bug Fixes - -* **packages:** check canUseDOM before using DOM ([#5733](https://github.com/patternfly/patternfly-react/issues/5733)) ([915f03e](https://github.com/patternfly/patternfly-react/commit/915f03e7b8107a2767cc0df9bc72ba7364524d5e)) - - - - - -## [4.8.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.41...@patternfly/react-topology@4.8.42) (2021-05-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.40...@patternfly/react-topology@4.8.41) (2021-05-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.40](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.39...@patternfly/react-topology@4.8.40) (2021-05-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.38...@patternfly/react-topology@4.8.39) (2021-04-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.37...@patternfly/react-topology@4.8.38) (2021-04-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.36...@patternfly/react-topology@4.8.37) (2021-04-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.35...@patternfly/react-topology@4.8.36) (2021-04-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.34...@patternfly/react-topology@4.8.35) (2021-04-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.33...@patternfly/react-topology@4.8.34) (2021-04-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.32...@patternfly/react-topology@4.8.33) (2021-04-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.31...@patternfly/react-topology@4.8.32) (2021-04-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.30...@patternfly/react-topology@4.8.31) (2021-04-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.29...@patternfly/react-topology@4.8.30) (2021-04-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.28...@patternfly/react-topology@4.8.29) (2021-04-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.27...@patternfly/react-topology@4.8.28) (2021-04-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.26...@patternfly/react-topology@4.8.27) (2021-04-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.25...@patternfly/react-topology@4.8.26) (2021-04-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.24...@patternfly/react-topology@4.8.25) (2021-04-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.23...@patternfly/react-topology@4.8.24) (2021-04-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.22...@patternfly/react-topology@4.8.23) (2021-04-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.21...@patternfly/react-topology@4.8.22) (2021-04-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.20...@patternfly/react-topology@4.8.21) (2021-04-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.19...@patternfly/react-topology@4.8.20) (2021-04-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.18...@patternfly/react-topology@4.8.19) (2021-04-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.17...@patternfly/react-topology@4.8.18) (2021-04-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.16...@patternfly/react-topology@4.8.17) (2021-04-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.15...@patternfly/react-topology@4.8.16) (2021-04-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.14...@patternfly/react-topology@4.8.15) (2021-04-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.13...@patternfly/react-topology@4.8.14) (2021-03-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.12...@patternfly/react-topology@4.8.13) (2021-03-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.11...@patternfly/react-topology@4.8.12) (2021-03-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.10...@patternfly/react-topology@4.8.11) (2021-03-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.9...@patternfly/react-topology@4.8.10) (2021-03-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.8...@patternfly/react-topology@4.8.9) (2021-03-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.7...@patternfly/react-topology@4.8.8) (2021-03-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.6...@patternfly/react-topology@4.8.7) (2021-03-25) - - -### Bug Fixes - -* **Topology:** Allow applications to choose using resizable drawer for topology side bar ([#5572](https://github.com/patternfly/patternfly-react/issues/5572)) ([82176dc](https://github.com/patternfly/patternfly-react/commit/82176dcc6328478df8216f583f65a86b49a2826e)) - - - - - -## [4.8.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.5...@patternfly/react-topology@4.8.6) (2021-03-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.4...@patternfly/react-topology@4.8.5) (2021-03-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.3...@patternfly/react-topology@4.8.4) (2021-03-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.2...@patternfly/react-topology@4.8.3) (2021-03-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.8.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.1...@patternfly/react-topology@4.8.2) (2021-03-17) - - -### Bug Fixes - -* **drawer:** dont initially render DrawerPanelContent ([#5543](https://github.com/patternfly/patternfly-react/issues/5543)) ([d07235d](https://github.com/patternfly/patternfly-react/commit/d07235de20d9c750fa6d8b6383bb14589f9276c7)) - - - - - -## [4.8.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.8.0...@patternfly/react-topology@4.8.1) (2021-03-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [4.8.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.45...@patternfly/react-topology@4.8.0) (2021-03-16) - - -### Features - -* **topology:** Use Drawer for topology side panel and allow resizing ([#5533](https://github.com/patternfly/patternfly-react/issues/5533)) ([301c6a0](https://github.com/patternfly/patternfly-react/commit/301c6a0ce13755b3e6f12a243043d67e1b63990b)) - - - - - -## [4.7.45](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.44...@patternfly/react-topology@4.7.45) (2021-03-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.44](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.43...@patternfly/react-topology@4.7.44) (2021-03-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.43](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.42...@patternfly/react-topology@4.7.43) (2021-03-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.41...@patternfly/react-topology@4.7.42) (2021-03-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.40...@patternfly/react-topology@4.7.41) (2021-03-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.40](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.39...@patternfly/react-topology@4.7.40) (2021-03-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.38...@patternfly/react-topology@4.7.39) (2021-03-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.37...@patternfly/react-topology@4.7.38) (2021-03-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.36...@patternfly/react-topology@4.7.37) (2021-03-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.35...@patternfly/react-topology@4.7.36) (2021-02-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.34...@patternfly/react-topology@4.7.35) (2021-02-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.33...@patternfly/react-topology@4.7.34) (2021-02-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.32...@patternfly/react-topology@4.7.33) (2021-02-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.31...@patternfly/react-topology@4.7.32) (2021-02-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.30...@patternfly/react-topology@4.7.31) (2021-02-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.29...@patternfly/react-topology@4.7.30) (2021-02-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.28...@patternfly/react-topology@4.7.29) (2021-02-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.27...@patternfly/react-topology@4.7.28) (2021-02-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.26...@patternfly/react-topology@4.7.27) (2021-02-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.25...@patternfly/react-topology@4.7.26) (2021-02-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.24...@patternfly/react-topology@4.7.25) (2021-02-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.23...@patternfly/react-topology@4.7.24) (2021-02-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.22...@patternfly/react-topology@4.7.23) (2021-02-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.21...@patternfly/react-topology@4.7.22) (2021-02-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.20...@patternfly/react-topology@4.7.21) (2021-02-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.19...@patternfly/react-topology@4.7.20) (2021-02-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.18...@patternfly/react-topology@4.7.19) (2021-02-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.17...@patternfly/react-topology@4.7.18) (2021-02-02) - - -### Bug Fixes - -* **topology:** fix if statement ([#5409](https://github.com/patternfly/patternfly-react/issues/5409)) ([7e1e802](https://github.com/patternfly/patternfly-react/commit/7e1e8027aa6ac19939d06dc35d1f78e2790f9f05)) - - - - - -## [4.7.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.16...@patternfly/react-topology@4.7.17) (2021-02-01) - - -### Bug Fixes - -* **Tooltip:** only add aria when tooltip is visible/in the DOM ([#5382](https://github.com/patternfly/patternfly-react/issues/5382)) ([10263d9](https://github.com/patternfly/patternfly-react/commit/10263d993ea781a1bf681816eeddce9fa7657670)) - - - - - -## [4.7.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.15...@patternfly/react-topology@4.7.16) (2021-02-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.14...@patternfly/react-topology@4.7.15) (2021-01-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.13...@patternfly/react-topology@4.7.14) (2021-01-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.12...@patternfly/react-topology@4.7.13) (2021-01-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.11...@patternfly/react-topology@4.7.12) (2021-01-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.10...@patternfly/react-topology@4.7.11) (2021-01-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.9...@patternfly/react-topology@4.7.10) (2021-01-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.8...@patternfly/react-topology@4.7.9) (2021-01-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.7...@patternfly/react-topology@4.7.8) (2021-01-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.6...@patternfly/react-topology@4.7.7) (2021-01-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.5...@patternfly/react-topology@4.7.6) (2021-01-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.4...@patternfly/react-topology@4.7.5) (2021-01-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.3...@patternfly/react-topology@4.7.4) (2021-01-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.2...@patternfly/react-topology@4.7.3) (2021-01-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.1...@patternfly/react-topology@4.7.2) (2021-01-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.7.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.7.0...@patternfly/react-topology@4.7.1) (2021-01-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [4.7.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.96...@patternfly/react-topology@4.7.0) (2021-01-06) - - -### Features - -* **packages:** use react 17 ([#5111](https://github.com/patternfly/patternfly-react/issues/5111)) ([7fbafcc](https://github.com/patternfly/patternfly-react/commit/7fbafcc947c95d2bda2f4fad8f7737cf7dd3fca6)) - - - - - -## [4.6.96](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.95...@patternfly/react-topology@4.6.96) (2021-01-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.95](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.94...@patternfly/react-topology@4.6.95) (2021-01-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.94](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.93...@patternfly/react-topology@4.6.94) (2021-01-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.93](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.92...@patternfly/react-topology@4.6.93) (2020-12-16) - - -### Bug Fixes - -* **topology:** Prevent context sub menus from overflowing viewport ([#5271](https://github.com/patternfly/patternfly-react/issues/5271)) ([12cd470](https://github.com/patternfly/patternfly-react/commit/12cd470f138df8b0eaa8f768bef8a86d448a6590)) - - - - - -## [4.6.92](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.91...@patternfly/react-topology@4.6.92) (2020-12-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.91](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.90...@patternfly/react-topology@4.6.91) (2020-12-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.90](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.89...@patternfly/react-topology@4.6.90) (2020-12-14) - - -### Bug Fixes - -* **topology:** adjust topology node layout when new nodes are added ([#5249](https://github.com/patternfly/patternfly-react/issues/5249)) ([4f420c2](https://github.com/patternfly/patternfly-react/commit/4f420c2a1843e60bab55f51cbebc51171e103a04)) - - - - - -## [4.6.89](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.88...@patternfly/react-topology@4.6.89) (2020-12-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.88](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.87...@patternfly/react-topology@4.6.88) (2020-12-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.87](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.86...@patternfly/react-topology@4.6.87) (2020-12-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.86](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.85...@patternfly/react-topology@4.6.86) (2020-12-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.85](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.84...@patternfly/react-topology@4.6.85) (2020-12-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.84](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.83...@patternfly/react-topology@4.6.84) (2020-12-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.83](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.82...@patternfly/react-topology@4.6.83) (2020-12-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.82](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.81...@patternfly/react-topology@4.6.82) (2020-12-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.81](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.80...@patternfly/react-topology@4.6.81) (2020-12-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.80](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.79...@patternfly/react-topology@4.6.80) (2020-12-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.79](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.78...@patternfly/react-topology@4.6.79) (2020-12-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.78](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.77...@patternfly/react-topology@4.6.78) (2020-12-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.77](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.76...@patternfly/react-topology@4.6.77) (2020-12-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.76](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.75...@patternfly/react-topology@4.6.76) (2020-12-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.75](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.74...@patternfly/react-topology@4.6.75) (2020-12-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.74](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.73...@patternfly/react-topology@4.6.74) (2020-12-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.73](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.72...@patternfly/react-topology@4.6.73) (2020-11-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.72](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.71...@patternfly/react-topology@4.6.72) (2020-11-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.71](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.70...@patternfly/react-topology@4.6.71) (2020-11-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.70](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.69...@patternfly/react-topology@4.6.70) (2020-11-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.69](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.68...@patternfly/react-topology@4.6.69) (2020-11-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.68](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.67...@patternfly/react-topology@4.6.68) (2020-11-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.67](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.66...@patternfly/react-topology@4.6.67) (2020-11-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.66](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.65...@patternfly/react-topology@4.6.66) (2020-11-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.65](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.64...@patternfly/react-topology@4.6.65) (2020-11-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.64](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.63...@patternfly/react-topology@4.6.64) (2020-11-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.63](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.62...@patternfly/react-topology@4.6.63) (2020-11-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.62](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.61...@patternfly/react-topology@4.6.62) (2020-11-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.61](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.60...@patternfly/react-topology@4.6.61) (2020-11-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.60](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.59...@patternfly/react-topology@4.6.60) (2020-11-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.59](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.58...@patternfly/react-topology@4.6.59) (2020-10-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.58](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.57...@patternfly/react-topology@4.6.58) (2020-10-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.57](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.56...@patternfly/react-topology@4.6.57) (2020-10-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.56](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.55...@patternfly/react-topology@4.6.56) (2020-10-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.55](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.54...@patternfly/react-topology@4.6.55) (2020-10-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.54](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.53...@patternfly/react-topology@4.6.54) (2020-10-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.53](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.52...@patternfly/react-topology@4.6.53) (2020-10-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.52](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.51...@patternfly/react-topology@4.6.52) (2020-10-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.51](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.50...@patternfly/react-topology@4.6.51) (2020-10-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.50](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.49...@patternfly/react-topology@4.6.50) (2020-10-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.49](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.48...@patternfly/react-topology@4.6.49) (2020-10-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.48](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.47...@patternfly/react-topology@4.6.48) (2020-10-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.47](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.46...@patternfly/react-topology@4.6.47) (2020-10-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.46](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.45...@patternfly/react-topology@4.6.46) (2020-10-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.45](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.44...@patternfly/react-topology@4.6.45) (2020-10-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.44](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.43...@patternfly/react-topology@4.6.44) (2020-10-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.43](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.42...@patternfly/react-topology@4.6.43) (2020-10-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.41...@patternfly/react-topology@4.6.42) (2020-10-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.40...@patternfly/react-topology@4.6.41) (2020-10-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.40](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.39...@patternfly/react-topology@4.6.40) (2020-10-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.38...@patternfly/react-topology@4.6.39) (2020-10-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.37...@patternfly/react-topology@4.6.38) (2020-10-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.36...@patternfly/react-topology@4.6.37) (2020-10-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.35...@patternfly/react-topology@4.6.36) (2020-10-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.34...@patternfly/react-topology@4.6.35) (2020-10-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.33...@patternfly/react-topology@4.6.34) (2020-10-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.32...@patternfly/react-topology@4.6.33) (2020-10-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.31...@patternfly/react-topology@4.6.32) (2020-10-13) - - -### Bug Fixes - -* **topology:** Add notification on graph position/scale/extent changes ([#5004](https://github.com/patternfly/patternfly-react/issues/5004)) ([4e7025a](https://github.com/patternfly/patternfly-react/commit/4e7025add236d0f5760b275e6821e2154eeadb21)) - - - - - -## [4.6.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.30...@patternfly/react-topology@4.6.31) (2020-10-12) - - -### Bug Fixes - -* **topology:** Do not update nodes on layout when fixed ([#4978](https://github.com/patternfly/patternfly-react/issues/4978)) ([932fa1f](https://github.com/patternfly/patternfly-react/commit/932fa1fd4cce6fcc1bbbc0a55bbde674701f1803)) -* **topology:** Fix for issue when dragging nodes that get re-created ([#4975](https://github.com/patternfly/patternfly-react/issues/4975)) ([08654b7](https://github.com/patternfly/patternfly-react/commit/08654b7cee943f9a8819b573315dea3592303461)) - - - - - -## [4.6.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.29...@patternfly/react-topology@4.6.30) (2020-10-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.28...@patternfly/react-topology@4.6.29) (2020-10-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.27...@patternfly/react-topology@4.6.28) (2020-10-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.26...@patternfly/react-topology@4.6.27) (2020-10-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.25...@patternfly/react-topology@4.6.26) (2020-10-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.24...@patternfly/react-topology@4.6.25) (2020-10-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.23...@patternfly/react-topology@4.6.24) (2020-10-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.22...@patternfly/react-topology@4.6.23) (2020-10-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.21...@patternfly/react-topology@4.6.22) (2020-10-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.20...@patternfly/react-topology@4.6.21) (2020-10-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.19...@patternfly/react-topology@4.6.20) (2020-10-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.18...@patternfly/react-topology@4.6.19) (2020-10-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.17...@patternfly/react-topology@4.6.18) (2020-10-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.16...@patternfly/react-topology@4.6.17) (2020-10-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.15...@patternfly/react-topology@4.6.16) (2020-10-01) - - -### Bug Fixes - -* **topology:** fix exports ([#4927](https://github.com/patternfly/patternfly-react/issues/4927)) ([0ebd80d](https://github.com/patternfly/patternfly-react/commit/0ebd80dd2c21df4f093623cea5adf004de42416e)) - - - - - -## [4.6.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.14...@patternfly/react-topology@4.6.15) (2020-10-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.13...@patternfly/react-topology@4.6.14) (2020-10-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.12...@patternfly/react-topology@4.6.13) (2020-10-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.11...@patternfly/react-topology@4.6.12) (2020-09-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.10...@patternfly/react-topology@4.6.11) (2020-09-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.9...@patternfly/react-topology@4.6.10) (2020-09-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.8...@patternfly/react-topology@4.6.9) (2020-09-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.7...@patternfly/react-topology@4.6.8) (2020-09-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.6...@patternfly/react-topology@4.6.7) (2020-09-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.5...@patternfly/react-topology@4.6.6) (2020-09-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.4...@patternfly/react-topology@4.6.5) (2020-09-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.3...@patternfly/react-topology@4.6.4) (2020-09-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.2...@patternfly/react-topology@4.6.3) (2020-09-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.1...@patternfly/react-topology@4.6.2) (2020-09-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.6.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.6.0...@patternfly/react-topology@4.6.1) (2020-09-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [4.6.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.18...@patternfly/react-topology@4.6.0) (2020-09-22) - - -### Features - -* **workspace:** use new doc theme ([#4840](https://github.com/patternfly/patternfly-react/issues/4840)) ([7bf451d](https://github.com/patternfly/patternfly-react/commit/7bf451d468538cc0b301fb68f0c1a8108600c24f)) - - - - - -## [4.5.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.17...@patternfly/react-topology@4.5.18) (2020-09-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.16...@patternfly/react-topology@4.5.17) (2020-09-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.15...@patternfly/react-topology@4.5.16) (2020-09-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.14...@patternfly/react-topology@4.5.15) (2020-09-21) - - -### Bug Fixes - -* **topology:** fix selector for cancelling dnd ([#4850](https://github.com/patternfly/patternfly-react/issues/4850)) ([6b9e3fe](https://github.com/patternfly/patternfly-react/commit/6b9e3fe208f60fcdf919c1ed5bb5408e3187b6ce)) - - - - - -## [4.5.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.13...@patternfly/react-topology@4.5.14) (2020-09-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.12...@patternfly/react-topology@4.5.13) (2020-09-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.11...@patternfly/react-topology@4.5.12) (2020-09-17) - - -### Bug Fixes - -* **Topology:** Wrap drag event handlers in actions ([#4826](https://github.com/patternfly/patternfly-react/issues/4826)) ([f947f8b](https://github.com/patternfly/patternfly-react/commit/f947f8bfaba18d55754fff493c6bf9f08b215bd0)) - - - - - -## [4.5.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.10...@patternfly/react-topology@4.5.11) (2020-09-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.9...@patternfly/react-topology@4.5.10) (2020-09-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.8...@patternfly/react-topology@4.5.9) (2020-09-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.7...@patternfly/react-topology@4.5.8) (2020-09-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.6...@patternfly/react-topology@4.5.7) (2020-09-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.5...@patternfly/react-topology@4.5.6) (2020-09-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.4...@patternfly/react-topology@4.5.5) (2020-09-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.3...@patternfly/react-topology@4.5.4) (2020-09-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.2...@patternfly/react-topology@4.5.3) (2020-09-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.1...@patternfly/react-topology@4.5.2) (2020-09-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.5.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.5.0...@patternfly/react-topology@4.5.1) (2020-08-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [4.5.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.75...@patternfly/react-topology@4.5.0) (2020-08-27) - - -### Features - -* **topology:** Enable saving current topology graph model ([#4690](https://github.com/patternfly/patternfly-react/issues/4690)) ([2c4b25c](https://github.com/patternfly/patternfly-react/commit/2c4b25ce8aa64a08de38c0a1884c96df643f348e)) - - - - - -## [4.4.75](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.74...@patternfly/react-topology@4.4.75) (2020-08-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.74](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.73...@patternfly/react-topology@4.4.74) (2020-08-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.73](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.72...@patternfly/react-topology@4.4.73) (2020-08-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.72](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.71...@patternfly/react-topology@4.4.72) (2020-08-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.71](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.70...@patternfly/react-topology@4.4.71) (2020-08-24) - - -### Bug Fixes - -* **docs:** use ids and h3s ([#4720](https://github.com/patternfly/patternfly-react/issues/4720)) ([a3f684f](https://github.com/patternfly/patternfly-react/commit/a3f684fa23cfce3d8e79b86206773292790cec5c)) - - - - - -## [4.4.70](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.69...@patternfly/react-topology@4.4.70) (2020-08-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.69](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.68...@patternfly/react-topology@4.4.69) (2020-08-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.68](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.67...@patternfly/react-topology@4.4.68) (2020-08-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.67](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.66...@patternfly/react-topology@4.4.67) (2020-08-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.66](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.65...@patternfly/react-topology@4.4.66) (2020-08-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.65](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.64...@patternfly/react-topology@4.4.65) (2020-08-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.64](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.63...@patternfly/react-topology@4.4.64) (2020-08-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.63](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.62...@patternfly/react-topology@4.4.63) (2020-08-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.62](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.61...@patternfly/react-topology@4.4.62) (2020-08-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.61](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.60...@patternfly/react-topology@4.4.61) (2020-08-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.60](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.59...@patternfly/react-topology@4.4.60) (2020-08-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.59](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.58...@patternfly/react-topology@4.4.59) (2020-08-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.58](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.57...@patternfly/react-topology@4.4.58) (2020-08-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.57](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.56...@patternfly/react-topology@4.4.57) (2020-08-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.56](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.55...@patternfly/react-topology@4.4.56) (2020-08-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.55](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.54...@patternfly/react-topology@4.4.55) (2020-08-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.54](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.53...@patternfly/react-topology@4.4.54) (2020-08-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.53](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.52...@patternfly/react-topology@4.4.53) (2020-07-31) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.52](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.51...@patternfly/react-topology@4.4.52) (2020-07-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.51](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.50...@patternfly/react-topology@4.4.51) (2020-07-29) - - -### Bug Fixes - -* **Topology:** Re-parent nodes with invalid parents to graph ([#4629](https://github.com/patternfly/patternfly-react/issues/4629)) ([63f5046](https://github.com/patternfly/patternfly-react/commit/63f50460c672249efb9c6ed445cc32a1355e116d)) - - - - - -## [4.4.50](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.49...@patternfly/react-topology@4.4.50) (2020-07-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.49](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.48...@patternfly/react-topology@4.4.49) (2020-07-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.48](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.47...@patternfly/react-topology@4.4.48) (2020-07-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.47](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.46...@patternfly/react-topology@4.4.47) (2020-07-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.46](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.45...@patternfly/react-topology@4.4.46) (2020-07-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.45](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.44...@patternfly/react-topology@4.4.45) (2020-07-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.44](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.43...@patternfly/react-topology@4.4.44) (2020-07-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.43](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.42...@patternfly/react-topology@4.4.43) (2020-07-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.41...@patternfly/react-topology@4.4.42) (2020-07-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.40...@patternfly/react-topology@4.4.41) (2020-07-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.40](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.39...@patternfly/react-topology@4.4.40) (2020-07-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.38...@patternfly/react-topology@4.4.39) (2020-07-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.37...@patternfly/react-topology@4.4.38) (2020-07-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.36...@patternfly/react-topology@4.4.37) (2020-07-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.35...@patternfly/react-topology@4.4.36) (2020-07-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.34...@patternfly/react-topology@4.4.35) (2020-07-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.33...@patternfly/react-topology@4.4.34) (2020-07-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.32...@patternfly/react-topology@4.4.33) (2020-07-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.31...@patternfly/react-topology@4.4.32) (2020-07-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.30...@patternfly/react-topology@4.4.31) (2020-07-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.29...@patternfly/react-topology@4.4.30) (2020-07-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.28...@patternfly/react-topology@4.4.29) (2020-07-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.27...@patternfly/react-topology@4.4.28) (2020-07-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.26...@patternfly/react-topology@4.4.27) (2020-07-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.25...@patternfly/react-topology@4.4.26) (2020-07-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.24...@patternfly/react-topology@4.4.25) (2020-07-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.23...@patternfly/react-topology@4.4.24) (2020-07-13) - - -### Bug Fixes - -* **topology:** create connector drag spec configuration ([#4529](https://github.com/patternfly/patternfly-react/issues/4529)) ([fbe4ba8](https://github.com/patternfly/patternfly-react/commit/fbe4ba81861f012eccd7a88a4aed039f4f98b694)) - - - - - -## [4.4.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.22...@patternfly/react-topology@4.4.23) (2020-07-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.21...@patternfly/react-topology@4.4.22) (2020-07-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.20...@patternfly/react-topology@4.4.21) (2020-07-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.19...@patternfly/react-topology@4.4.20) (2020-07-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.18...@patternfly/react-topology@4.4.19) (2020-07-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.17...@patternfly/react-topology@4.4.18) (2020-07-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.16...@patternfly/react-topology@4.4.17) (2020-07-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.15...@patternfly/react-topology@4.4.16) (2020-07-08) - - -### Bug Fixes - -* **topology:** add lost support for custom menu items in withCreateConnector ([#4493](https://github.com/patternfly/patternfly-react/issues/4493)) ([4fbb23d](https://github.com/patternfly/patternfly-react/commit/4fbb23d56876d0e12cc9e45bb71bd5a72771e5cf)) -* **topology:** correct mobx dependencies ([#4487](https://github.com/patternfly/patternfly-react/issues/4487)) ([6a17897](https://github.com/patternfly/patternfly-react/commit/6a17897c8c6a12201c95410080d745c0f48a6d4d)) - - - - - -## [4.4.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.14...@patternfly/react-topology@4.4.15) (2020-07-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.13...@patternfly/react-topology@4.4.14) (2020-07-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.12...@patternfly/react-topology@4.4.13) (2020-07-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.11...@patternfly/react-topology@4.4.12) (2020-07-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.10...@patternfly/react-topology@4.4.11) (2020-07-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.9...@patternfly/react-topology@4.4.10) (2020-07-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.8...@patternfly/react-topology@4.4.9) (2020-06-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.7...@patternfly/react-topology@4.4.8) (2020-06-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.6...@patternfly/react-topology@4.4.7) (2020-06-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.5...@patternfly/react-topology@4.4.6) (2020-06-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.4...@patternfly/react-topology@4.4.5) (2020-06-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.3...@patternfly/react-topology@4.4.4) (2020-06-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.2...@patternfly/react-topology@4.4.3) (2020-06-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.1...@patternfly/react-topology@4.4.2) (2020-06-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.4.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.4.0...@patternfly/react-topology@4.4.1) (2020-06-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [4.4.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.30...@patternfly/react-topology@4.4.0) (2020-06-19) - - -### Features - -* **button:** add isAriaDisabled ([#3801](https://github.com/patternfly/patternfly-react/issues/3801)) ([a6ef254](https://github.com/patternfly/patternfly-react/commit/a6ef2545833f3cf6b98ad0736719975cc0a9c6dd)) - - - - - -## [4.3.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.29...@patternfly/react-topology@4.3.30) (2020-06-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.28...@patternfly/react-topology@4.3.29) (2020-06-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.27...@patternfly/react-topology@4.3.28) (2020-06-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.26...@patternfly/react-topology@4.3.27) (2020-06-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.25...@patternfly/react-topology@4.3.26) (2020-06-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.24...@patternfly/react-topology@4.3.25) (2020-06-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.23...@patternfly/react-topology@4.3.24) (2020-06-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.22...@patternfly/react-topology@4.3.23) (2020-06-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.21...@patternfly/react-topology@4.3.22) (2020-06-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.20...@patternfly/react-topology@4.3.21) (2020-06-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.19...@patternfly/react-topology@4.3.20) (2020-06-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.18...@patternfly/react-topology@4.3.19) (2020-06-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.17...@patternfly/react-topology@4.3.18) (2020-06-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.16...@patternfly/react-topology@4.3.17) (2020-06-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.15...@patternfly/react-topology@4.3.16) (2020-06-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.14...@patternfly/react-topology@4.3.15) (2020-06-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.13...@patternfly/react-topology@4.3.14) (2020-06-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.12...@patternfly/react-topology@4.3.13) (2020-06-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.11...@patternfly/react-topology@4.3.12) (2020-06-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.10...@patternfly/react-topology@4.3.11) (2020-06-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.9...@patternfly/react-topology@4.3.10) (2020-06-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.8...@patternfly/react-topology@4.3.9) (2020-06-01) - - -### Bug Fixes - -* **breakpoints:** make API consistent and appear in docs ([#4310](https://github.com/patternfly/patternfly-react/issues/4310)) ([ac1afa6](https://github.com/patternfly/patternfly-react/commit/ac1afa60067346c658fcb160534d9ddaf7dafbc6)) - - - - - -## [4.3.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.7...@patternfly/react-topology@4.3.8) (2020-05-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.6...@patternfly/react-topology@4.3.7) (2020-05-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.5...@patternfly/react-topology@4.3.6) (2020-05-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.4...@patternfly/react-topology@4.3.5) (2020-05-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.3...@patternfly/react-topology@4.3.4) (2020-05-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.2...@patternfly/react-topology@4.3.3) (2020-05-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.1...@patternfly/react-topology@4.3.2) (2020-05-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [4.3.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@4.3.0...@patternfly/react-topology@4.3.1) (2020-05-18) - - -### Bug Fixes - -* **topology:** make required packages normal deps ([#4258](https://github.com/patternfly/patternfly-react/issues/4258)) ([af40535](https://github.com/patternfly/patternfly-react/commit/af40535221548b7471193964505323c7302351e1)) - - - - - -# [4.3.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.66...@patternfly/react-topology@4.3.0) (2020-05-15) - - -### Features - -* **master:** merge v4 ([#4255](https://github.com/patternfly/patternfly-react/issues/4255)) ([567c0b8](https://github.com/patternfly/patternfly-react/commit/567c0b88b10d2cd629ce380745a24dacdf9dd3d1)), closes [#3868](https://github.com/patternfly/patternfly-react/issues/3868) [#3915](https://github.com/patternfly/patternfly-react/issues/3915) [#3921](https://github.com/patternfly/patternfly-react/issues/3921) [#3872](https://github.com/patternfly/patternfly-react/issues/3872) [#3821](https://github.com/patternfly/patternfly-react/issues/3821) [#3807](https://github.com/patternfly/patternfly-react/issues/3807) [#3879](https://github.com/patternfly/patternfly-react/issues/3879) [#3871](https://github.com/patternfly/patternfly-react/issues/3871) [#3881](https://github.com/patternfly/patternfly-react/issues/3881) [#3826](https://github.com/patternfly/patternfly-react/issues/3826) [#3490](https://github.com/patternfly/patternfly-react/issues/3490) [#3882](https://github.com/patternfly/patternfly-react/issues/3882) [#3843](https://github.com/patternfly/patternfly-react/issues/3843) [#3884](https://github.com/patternfly/patternfly-react/issues/3884) [#3609](https://github.com/patternfly/patternfly-react/issues/3609) [#3880](https://github.com/patternfly/patternfly-react/issues/3880) [#3865](https://github.com/patternfly/patternfly-react/issues/3865) [#3894](https://github.com/patternfly/patternfly-react/issues/3894) [#3897](https://github.com/patternfly/patternfly-react/issues/3897) [#3892](https://github.com/patternfly/patternfly-react/issues/3892) [#3891](https://github.com/patternfly/patternfly-react/issues/3891) [#3908](https://github.com/patternfly/patternfly-react/issues/3908) [#3910](https://github.com/patternfly/patternfly-react/issues/3910) [#3861](https://github.com/patternfly/patternfly-react/issues/3861) [#3877](https://github.com/patternfly/patternfly-react/issues/3877) [#3916](https://github.com/patternfly/patternfly-react/issues/3916) [#3886](https://github.com/patternfly/patternfly-react/issues/3886) [#3872](https://github.com/patternfly/patternfly-react/issues/3872) [#3821](https://github.com/patternfly/patternfly-react/issues/3821) [#3807](https://github.com/patternfly/patternfly-react/issues/3807) [#3879](https://github.com/patternfly/patternfly-react/issues/3879) [#3871](https://github.com/patternfly/patternfly-react/issues/3871) [#3881](https://github.com/patternfly/patternfly-react/issues/3881) [#3826](https://github.com/patternfly/patternfly-react/issues/3826) [#3490](https://github.com/patternfly/patternfly-react/issues/3490) [#3882](https://github.com/patternfly/patternfly-react/issues/3882) [#3927](https://github.com/patternfly/patternfly-react/issues/3927) [#3933](https://github.com/patternfly/patternfly-react/issues/3933) [#3221](https://github.com/patternfly/patternfly-react/issues/3221) [#3873](https://github.com/patternfly/patternfly-react/issues/3873) [#3928](https://github.com/patternfly/patternfly-react/issues/3928) [#3929](https://github.com/patternfly/patternfly-react/issues/3929) [#2582](https://github.com/patternfly/patternfly-react/issues/2582) [#3296](https://github.com/patternfly/patternfly-react/issues/3296) [#3924](https://github.com/patternfly/patternfly-react/issues/3924) [#1529](https://github.com/patternfly/patternfly-react/issues/1529) [#3903](https://github.com/patternfly/patternfly-react/issues/3903) [#3904](https://github.com/patternfly/patternfly-react/issues/3904) [#3974](https://github.com/patternfly/patternfly-react/issues/3974) [#3970](https://github.com/patternfly/patternfly-react/issues/3970) [#3920](https://github.com/patternfly/patternfly-react/issues/3920) [#3945](https://github.com/patternfly/patternfly-react/issues/3945) [#3978](https://github.com/patternfly/patternfly-react/issues/3978) [#3962](https://github.com/patternfly/patternfly-react/issues/3962) [#3975](https://github.com/patternfly/patternfly-react/issues/3975) [#3906](https://github.com/patternfly/patternfly-react/issues/3906) [#3870](https://github.com/patternfly/patternfly-react/issues/3870) [#3958](https://github.com/patternfly/patternfly-react/issues/3958) [#3922](https://github.com/patternfly/patternfly-react/issues/3922) [#3985](https://github.com/patternfly/patternfly-react/issues/3985) [#3991](https://github.com/patternfly/patternfly-react/issues/3991) [#3872](https://github.com/patternfly/patternfly-react/issues/3872) [#3821](https://github.com/patternfly/patternfly-react/issues/3821) [#3807](https://github.com/patternfly/patternfly-react/issues/3807) [#3879](https://github.com/patternfly/patternfly-react/issues/3879) [#3871](https://github.com/patternfly/patternfly-react/issues/3871) [#3881](https://github.com/patternfly/patternfly-react/issues/3881) [#3826](https://github.com/patternfly/patternfly-react/issues/3826) [#3490](https://github.com/patternfly/patternfly-react/issues/3490) [#3882](https://github.com/patternfly/patternfly-react/issues/3882) [#3843](https://github.com/patternfly/patternfly-react/issues/3843) [#3884](https://github.com/patternfly/patternfly-react/issues/3884) [#3609](https://github.com/patternfly/patternfly-react/issues/3609) [#3880](https://github.com/patternfly/patternfly-react/issues/3880) [#3865](https://github.com/patternfly/patternfly-react/issues/3865) [#3894](https://github.com/patternfly/patternfly-react/issues/3894) [#3897](https://github.com/patternfly/patternfly-react/issues/3897) [#3892](https://github.com/patternfly/patternfly-react/issues/3892) [#3891](https://github.com/patternfly/patternfly-react/issues/3891) [#3908](https://github.com/patternfly/patternfly-react/issues/3908) [#3910](https://github.com/patternfly/patternfly-react/issues/3910) [#3861](https://github.com/patternfly/patternfly-react/issues/3861) [#3877](https://github.com/patternfly/patternfly-react/issues/3877) [#3916](https://github.com/patternfly/patternfly-react/issues/3916) [#3844](https://github.com/patternfly/patternfly-react/issues/3844) [#3919](https://github.com/patternfly/patternfly-react/issues/3919) [#3923](https://github.com/patternfly/patternfly-react/issues/3923) [#3838](https://github.com/patternfly/patternfly-react/issues/3838) [#3895](https://github.com/patternfly/patternfly-react/issues/3895) [#3896](https://github.com/patternfly/patternfly-react/issues/3896) [#3771](https://github.com/patternfly/patternfly-react/issues/3771) [#3940](https://github.com/patternfly/patternfly-react/issues/3940) [#3941](https://github.com/patternfly/patternfly-react/issues/3941) [#3441](https://github.com/patternfly/patternfly-react/issues/3441) [#3950](https://github.com/patternfly/patternfly-react/issues/3950) [#3642](https://github.com/patternfly/patternfly-react/issues/3642) [#3964](https://github.com/patternfly/patternfly-react/issues/3964) [#3968](https://github.com/patternfly/patternfly-react/issues/3968) [#3967](https://github.com/patternfly/patternfly-react/issues/3967) [#3971](https://github.com/patternfly/patternfly-react/issues/3971) [#3942](https://github.com/patternfly/patternfly-react/issues/3942) [#3898](https://github.com/patternfly/patternfly-react/issues/3898) [#3898](https://github.com/patternfly/patternfly-react/issues/3898) [#3976](https://github.com/patternfly/patternfly-react/issues/3976) [#3889](https://github.com/patternfly/patternfly-react/issues/3889) [#3641](https://github.com/patternfly/patternfly-react/issues/3641) [#3982](https://github.com/patternfly/patternfly-react/issues/3982) [#3979](https://github.com/patternfly/patternfly-react/issues/3979) [#3989](https://github.com/patternfly/patternfly-react/issues/3989) [#4017](https://github.com/patternfly/patternfly-react/issues/4017) [#4022](https://github.com/patternfly/patternfly-react/issues/4022) [#4014](https://github.com/patternfly/patternfly-react/issues/4014) [#4048](https://github.com/patternfly/patternfly-react/issues/4048) [#4050](https://github.com/patternfly/patternfly-react/issues/4050) [#4051](https://github.com/patternfly/patternfly-react/issues/4051) [#4058](https://github.com/patternfly/patternfly-react/issues/4058) [#4030](https://github.com/patternfly/patternfly-react/issues/4030) [#4031](https://github.com/patternfly/patternfly-react/issues/4031) [#3996](https://github.com/patternfly/patternfly-react/issues/3996) [#4001](https://github.com/patternfly/patternfly-react/issues/4001) [#4004](https://github.com/patternfly/patternfly-react/issues/4004) [#4066](https://github.com/patternfly/patternfly-react/issues/4066) [#4021](https://github.com/patternfly/patternfly-react/issues/4021) [#4061](https://github.com/patternfly/patternfly-react/issues/4061) [#4026](https://github.com/patternfly/patternfly-react/issues/4026) [#4069](https://github.com/patternfly/patternfly-react/issues/4069) [#4073](https://github.com/patternfly/patternfly-react/issues/4073) [#4036](https://github.com/patternfly/patternfly-react/issues/4036) [#4019](https://github.com/patternfly/patternfly-react/issues/4019) [#4081](https://github.com/patternfly/patternfly-react/issues/4081) [#4033](https://github.com/patternfly/patternfly-react/issues/4033) [#4065](https://github.com/patternfly/patternfly-react/issues/4065) [#4078](https://github.com/patternfly/patternfly-react/issues/4078) [#4032](https://github.com/patternfly/patternfly-react/issues/4032) [#4029](https://github.com/patternfly/patternfly-react/issues/4029) [#4064](https://github.com/patternfly/patternfly-react/issues/4064) [#4063](https://github.com/patternfly/patternfly-react/issues/4063) [#2593](https://github.com/patternfly/patternfly-react/issues/2593) [#4076](https://github.com/patternfly/patternfly-react/issues/4076) [#4099](https://github.com/patternfly/patternfly-react/issues/4099) [#4038](https://github.com/patternfly/patternfly-react/issues/4038) [#4116](https://github.com/patternfly/patternfly-react/issues/4116) [#3960](https://github.com/patternfly/patternfly-react/issues/3960) [#4121](https://github.com/patternfly/patternfly-react/issues/4121) [#4123](https://github.com/patternfly/patternfly-react/issues/4123) [#4025](https://github.com/patternfly/patternfly-react/issues/4025) [#4126](https://github.com/patternfly/patternfly-react/issues/4126) [#4122](https://github.com/patternfly/patternfly-react/issues/4122) [#4086](https://github.com/patternfly/patternfly-react/issues/4086) [#4127](https://github.com/patternfly/patternfly-react/issues/4127) [#4129](https://github.com/patternfly/patternfly-react/issues/4129) [#4111](https://github.com/patternfly/patternfly-react/issues/4111) [#4136](https://github.com/patternfly/patternfly-react/issues/4136) [#4138](https://github.com/patternfly/patternfly-react/issues/4138) [#4141](https://github.com/patternfly/patternfly-react/issues/4141) [#4145](https://github.com/patternfly/patternfly-react/issues/4145) [#4034](https://github.com/patternfly/patternfly-react/issues/4034) [#4144](https://github.com/patternfly/patternfly-react/issues/4144) [#4152](https://github.com/patternfly/patternfly-react/issues/4152) [#4158](https://github.com/patternfly/patternfly-react/issues/4158) [#4157](https://github.com/patternfly/patternfly-react/issues/4157) [#4156](https://github.com/patternfly/patternfly-react/issues/4156) [#4147](https://github.com/patternfly/patternfly-react/issues/4147) [#4159](https://github.com/patternfly/patternfly-react/issues/4159) [#4170](https://github.com/patternfly/patternfly-react/issues/4170) [#4142](https://github.com/patternfly/patternfly-react/issues/4142) [#4175](https://github.com/patternfly/patternfly-react/issues/4175) [#4176](https://github.com/patternfly/patternfly-react/issues/4176) [#4187](https://github.com/patternfly/patternfly-react/issues/4187) [#4188](https://github.com/patternfly/patternfly-react/issues/4188) [#4140](https://github.com/patternfly/patternfly-react/issues/4140) [#4193](https://github.com/patternfly/patternfly-react/issues/4193) [#4154](https://github.com/patternfly/patternfly-react/issues/4154) [#4192](https://github.com/patternfly/patternfly-react/issues/4192) [#4190](https://github.com/patternfly/patternfly-react/issues/4190) [#4199](https://github.com/patternfly/patternfly-react/issues/4199) [#4133](https://github.com/patternfly/patternfly-react/issues/4133) [#4165](https://github.com/patternfly/patternfly-react/issues/4165) [#4208](https://github.com/patternfly/patternfly-react/issues/4208) [#4212](https://github.com/patternfly/patternfly-react/issues/4212) [#4130](https://github.com/patternfly/patternfly-react/issues/4130) [#4219](https://github.com/patternfly/patternfly-react/issues/4219) [#4166](https://github.com/patternfly/patternfly-react/issues/4166) [#4202](https://github.com/patternfly/patternfly-react/issues/4202) [#4216](https://github.com/patternfly/patternfly-react/issues/4216) [#4225](https://github.com/patternfly/patternfly-react/issues/4225) [#4221](https://github.com/patternfly/patternfly-react/issues/4221) [#4146](https://github.com/patternfly/patternfly-react/issues/4146) [#3951](https://github.com/patternfly/patternfly-react/issues/3951) [#3681](https://github.com/patternfly/patternfly-react/issues/3681) [#4243](https://github.com/patternfly/patternfly-react/issues/4243) [#4220](https://github.com/patternfly/patternfly-react/issues/4220) [#4153](https://github.com/patternfly/patternfly-react/issues/4153) [#4209](https://github.com/patternfly/patternfly-react/issues/4209) [#4249](https://github.com/patternfly/patternfly-react/issues/4249) [#4239](https://github.com/patternfly/patternfly-react/issues/4239) [#4247](https://github.com/patternfly/patternfly-react/issues/4247) [#4246](https://github.com/patternfly/patternfly-react/issues/4246) [#3684](https://github.com/patternfly/patternfly-react/issues/3684) [#4223](https://github.com/patternfly/patternfly-react/issues/4223) [#4195](https://github.com/patternfly/patternfly-react/issues/4195) [#4254](https://github.com/patternfly/patternfly-react/issues/4254) - - - - - -## [2.14.66](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.65...@patternfly/react-topology@2.14.66) (2020-05-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.65](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.64...@patternfly/react-topology@2.14.65) (2020-05-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.64](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.63...@patternfly/react-topology@2.14.64) (2020-05-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.63](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.62...@patternfly/react-topology@2.14.63) (2020-05-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.62](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.61...@patternfly/react-topology@2.14.62) (2020-05-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.61](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.60...@patternfly/react-topology@2.14.61) (2020-05-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.60](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.59...@patternfly/react-topology@2.14.60) (2020-04-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.59](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.58...@patternfly/react-topology@2.14.59) (2020-04-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.58](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.57...@patternfly/react-topology@2.14.58) (2020-04-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.57](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.56...@patternfly/react-topology@2.14.57) (2020-04-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.56](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.55...@patternfly/react-topology@2.14.56) (2020-04-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.55](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.54...@patternfly/react-topology@2.14.55) (2020-04-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.54](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.53...@patternfly/react-topology@2.14.54) (2020-04-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.53](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.52...@patternfly/react-topology@2.14.53) (2020-04-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.52](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.51...@patternfly/react-topology@2.14.52) (2020-04-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.51](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.50...@patternfly/react-topology@2.14.51) (2020-04-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.50](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.49...@patternfly/react-topology@2.14.50) (2020-04-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.49](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.48...@patternfly/react-topology@2.14.49) (2020-04-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.48](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.47...@patternfly/react-topology@2.14.48) (2020-04-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.47](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.46...@patternfly/react-topology@2.14.47) (2020-03-31) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.46](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.45...@patternfly/react-topology@2.14.46) (2020-03-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.45](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.44...@patternfly/react-topology@2.14.45) (2020-03-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.44](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.43...@patternfly/react-topology@2.14.44) (2020-03-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.43](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.42...@patternfly/react-topology@2.14.43) (2020-03-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.41...@patternfly/react-topology@2.14.42) (2020-03-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.40...@patternfly/react-topology@2.14.41) (2020-03-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.40](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.39...@patternfly/react-topology@2.14.40) (2020-03-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.38...@patternfly/react-topology@2.14.39) (2020-03-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.37...@patternfly/react-topology@2.14.38) (2020-03-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.36...@patternfly/react-topology@2.14.37) (2020-03-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.35...@patternfly/react-topology@2.14.36) (2020-03-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.34...@patternfly/react-topology@2.14.35) (2020-03-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.33...@patternfly/react-topology@2.14.34) (2020-03-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.32...@patternfly/react-topology@2.14.33) (2020-03-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.31...@patternfly/react-topology@2.14.32) (2020-03-17) - - -### Bug Fixes - -* **core,table:** forward ref types ([#3919](https://github.com/patternfly/patternfly-react/issues/3919)) ([2210ec2](https://github.com/patternfly/patternfly-react/commit/2210ec2c142a385f85de8b0bac9c61a61521186d)) - - - - - -## [2.14.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.29...@patternfly/react-topology@2.14.31) (2020-03-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.29...@patternfly/react-topology@2.14.30) (2020-03-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.28...@patternfly/react-topology@2.14.29) (2020-03-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.27...@patternfly/react-topology@2.14.28) (2020-03-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.26...@patternfly/react-topology@2.14.27) (2020-03-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.25...@patternfly/react-topology@2.14.26) (2020-03-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.24...@patternfly/react-topology@2.14.25) (2020-03-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.23...@patternfly/react-topology@2.14.24) (2020-03-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.22...@patternfly/react-topology@2.14.23) (2020-03-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.21...@patternfly/react-topology@2.14.22) (2020-03-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.20...@patternfly/react-topology@2.14.21) (2020-03-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.19...@patternfly/react-topology@2.14.20) (2020-03-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.18...@patternfly/react-topology@2.14.19) (2020-03-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.17...@patternfly/react-topology@2.14.18) (2020-02-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.16...@patternfly/react-topology@2.14.17) (2020-02-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.15...@patternfly/react-topology@2.14.16) (2020-02-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.14...@patternfly/react-topology@2.14.15) (2020-02-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.13...@patternfly/react-topology@2.14.14) (2020-02-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.12...@patternfly/react-topology@2.14.13) (2020-02-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.11...@patternfly/react-topology@2.14.12) (2020-02-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.10...@patternfly/react-topology@2.14.11) (2020-02-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.9...@patternfly/react-topology@2.14.10) (2020-02-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.8...@patternfly/react-topology@2.14.9) (2020-02-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.7...@patternfly/react-topology@2.14.8) (2020-02-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.6...@patternfly/react-topology@2.14.7) (2020-02-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.5...@patternfly/react-topology@2.14.6) (2020-02-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.4...@patternfly/react-topology@2.14.5) (2020-02-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.3...@patternfly/react-topology@2.14.4) (2020-02-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.2...@patternfly/react-topology@2.14.3) (2020-02-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.1...@patternfly/react-topology@2.14.2) (2020-02-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.14.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.14.0...@patternfly/react-topology@2.14.1) (2020-02-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [2.14.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.21...@patternfly/react-topology@2.14.0) (2020-02-14) - - -### Features - -* **inline-edit:** add row level inline editing feature to Table ([#3581](https://github.com/patternfly/patternfly-react/issues/3581)) ([498d49f](https://github.com/patternfly/patternfly-react/commit/498d49fcc5cc9188197ddc7cd6468907fdd8224d)) - - - - - -## [2.13.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.20...@patternfly/react-topology@2.13.21) (2020-02-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.19...@patternfly/react-topology@2.13.20) (2020-02-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.18...@patternfly/react-topology@2.13.19) (2020-02-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.17...@patternfly/react-topology@2.13.18) (2020-02-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.16...@patternfly/react-topology@2.13.17) (2020-02-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.15...@patternfly/react-topology@2.13.16) (2020-02-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.14...@patternfly/react-topology@2.13.15) (2020-02-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.13...@patternfly/react-topology@2.13.14) (2020-02-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.12...@patternfly/react-topology@2.13.13) (2020-02-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.11...@patternfly/react-topology@2.13.12) (2020-02-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.10...@patternfly/react-topology@2.13.11) (2020-02-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.9...@patternfly/react-topology@2.13.10) (2020-02-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.8...@patternfly/react-topology@2.13.9) (2020-02-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.7...@patternfly/react-topology@2.13.8) (2020-02-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.6...@patternfly/react-topology@2.13.7) (2020-02-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.5...@patternfly/react-topology@2.13.6) (2020-02-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.4...@patternfly/react-topology@2.13.5) (2020-02-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.3...@patternfly/react-topology@2.13.4) (2020-02-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.2...@patternfly/react-topology@2.13.3) (2020-02-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.1...@patternfly/react-topology@2.13.2) (2020-01-31) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.13.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.13.0...@patternfly/react-topology@2.13.1) (2020-01-31) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [2.13.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.12.7...@patternfly/react-topology@2.13.0) (2020-01-31) - - -### Features - -* **icons:** use absolute import paths ([#3517](https://github.com/patternfly/patternfly-react/issues/3517)) ([897d359](https://github.com/patternfly/patternfly-react/commit/897d359a48ac2ce6ddea68bbdcfe0ae2f05544bd)) - - - - - -## [2.12.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.12.6...@patternfly/react-topology@2.12.7) (2020-01-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.12.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.12.5...@patternfly/react-topology@2.12.6) (2020-01-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.12.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.12.4...@patternfly/react-topology@2.12.5) (2020-01-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.12.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.12.3...@patternfly/react-topology@2.12.4) (2020-01-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.12.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.12.2...@patternfly/react-topology@2.12.3) (2020-01-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.12.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.12.1...@patternfly/react-topology@2.12.2) (2020-01-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.12.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.12.0...@patternfly/react-topology@2.12.1) (2020-01-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [2.12.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.73...@patternfly/react-topology@2.12.0) (2020-01-24) - - -### Features - -* **pf4:** Use absolute import paths for react core in pf4 packages. ([#3525](https://github.com/patternfly/patternfly-react/issues/3525)) ([65d0b3d](https://github.com/patternfly/patternfly-react/commit/65d0b3d1e04610895f122c1313d1442360356f13)), closes [#3155](https://github.com/patternfly/patternfly-react/issues/3155) - - - - - -## [2.11.73](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.72...@patternfly/react-topology@2.11.73) (2020-01-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.72](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.71...@patternfly/react-topology@2.11.72) (2020-01-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.71](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.70...@patternfly/react-topology@2.11.71) (2020-01-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.70](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.69...@patternfly/react-topology@2.11.70) (2020-01-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.69](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.68...@patternfly/react-topology@2.11.69) (2020-01-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.68](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.67...@patternfly/react-topology@2.11.68) (2020-01-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.67](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.66...@patternfly/react-topology@2.11.67) (2020-01-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.66](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.65...@patternfly/react-topology@2.11.66) (2020-01-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.65](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.64...@patternfly/react-topology@2.11.65) (2020-01-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.64](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.63...@patternfly/react-topology@2.11.64) (2020-01-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.63](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.62...@patternfly/react-topology@2.11.63) (2020-01-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.62](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.61...@patternfly/react-topology@2.11.62) (2020-01-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.61](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.60...@patternfly/react-topology@2.11.61) (2020-01-15) - - -### Bug Fixes - -* **linting:** minor updates to TopologyView package, missing imports in markdown examples ([#3510](https://github.com/patternfly/patternfly-react/issues/3510)) ([4561c59](https://github.com/patternfly/patternfly-react/commit/4561c59522d4834505b5b50215a78ed3096ba400)) - - - - - -## [2.11.60](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.59...@patternfly/react-topology@2.11.60) (2020-01-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.59](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.58...@patternfly/react-topology@2.11.59) (2020-01-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.58](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.57...@patternfly/react-topology@2.11.58) (2020-01-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.57](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.56...@patternfly/react-topology@2.11.57) (2020-01-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.56](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.55...@patternfly/react-topology@2.11.56) (2020-01-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.55](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.54...@patternfly/react-topology@2.11.55) (2020-01-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.54](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.53...@patternfly/react-topology@2.11.54) (2020-01-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.53](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.52...@patternfly/react-topology@2.11.53) (2020-01-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.52](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.51...@patternfly/react-topology@2.11.52) (2020-01-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.51](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.50...@patternfly/react-topology@2.11.51) (2020-01-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.50](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.49...@patternfly/react-topology@2.11.50) (2020-01-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.49](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.48...@patternfly/react-topology@2.11.49) (2020-01-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.48](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.47...@patternfly/react-topology@2.11.48) (2019-12-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.47](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.46...@patternfly/react-topology@2.11.47) (2019-12-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.46](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.45...@patternfly/react-topology@2.11.46) (2019-12-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.45](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.44...@patternfly/react-topology@2.11.45) (2019-12-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.44](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.43...@patternfly/react-topology@2.11.44) (2019-12-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.43](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.42...@patternfly/react-topology@2.11.43) (2019-12-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.41...@patternfly/react-topology@2.11.42) (2019-12-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.40...@patternfly/react-topology@2.11.41) (2019-12-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.40](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.39...@patternfly/react-topology@2.11.40) (2019-12-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.38...@patternfly/react-topology@2.11.39) (2019-12-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.37...@patternfly/react-topology@2.11.38) (2019-12-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.36...@patternfly/react-topology@2.11.37) (2019-12-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.35...@patternfly/react-topology@2.11.36) (2019-12-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.34...@patternfly/react-topology@2.11.35) (2019-12-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.33...@patternfly/react-topology@2.11.34) (2019-12-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.32...@patternfly/react-topology@2.11.33) (2019-12-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.31...@patternfly/react-topology@2.11.32) (2019-12-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.30...@patternfly/react-topology@2.11.31) (2019-12-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.29...@patternfly/react-topology@2.11.30) (2019-12-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.28...@patternfly/react-topology@2.11.29) (2019-12-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.27...@patternfly/react-topology@2.11.28) (2019-11-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.26...@patternfly/react-topology@2.11.27) (2019-11-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.25...@patternfly/react-topology@2.11.26) (2019-11-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.24...@patternfly/react-topology@2.11.25) (2019-11-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.23...@patternfly/react-topology@2.11.24) (2019-11-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.22...@patternfly/react-topology@2.11.23) (2019-11-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.21...@patternfly/react-topology@2.11.22) (2019-11-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.20...@patternfly/react-topology@2.11.21) (2019-11-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.19...@patternfly/react-topology@2.11.20) (2019-11-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.18...@patternfly/react-topology@2.11.19) (2019-11-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.17...@patternfly/react-topology@2.11.18) (2019-11-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.16...@patternfly/react-topology@2.11.17) (2019-11-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.15...@patternfly/react-topology@2.11.16) (2019-11-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.14...@patternfly/react-topology@2.11.15) (2019-11-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.13...@patternfly/react-topology@2.11.14) (2019-11-18) - - -### Bug Fixes - -* **topology:** Set topology container to take full height of the view ([#3314](https://github.com/patternfly/patternfly-react/issues/3314)) ([2b15cc0](https://github.com/patternfly/patternfly-react/commit/2b15cc04f5cae16e12ddfb6e5547aebd34f0869e)) - - - - - -## [2.11.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.12...@patternfly/react-topology@2.11.13) (2019-11-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.11...@patternfly/react-topology@2.11.12) (2019-11-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.10...@patternfly/react-topology@2.11.11) (2019-11-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.9...@patternfly/react-topology@2.11.10) (2019-11-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.8...@patternfly/react-topology@2.11.9) (2019-11-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.7...@patternfly/react-topology@2.11.8) (2019-11-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.6...@patternfly/react-topology@2.11.7) (2019-11-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.5...@patternfly/react-topology@2.11.6) (2019-11-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.4...@patternfly/react-topology@2.11.5) (2019-11-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.3...@patternfly/react-topology@2.11.4) (2019-10-31) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.2...@patternfly/react-topology@2.11.3) (2019-10-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.1...@patternfly/react-topology@2.11.2) (2019-10-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.11.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.11.0...@patternfly/react-topology@2.11.1) (2019-10-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [2.11.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.10.8...@patternfly/react-topology@2.11.0) (2019-10-24) - - -### Features - -* **react-catalog-view-extension:** Added catalog view extension and three components ([#3145](https://github.com/patternfly/patternfly-react/issues/3145)) ([20a981b](https://github.com/patternfly/patternfly-react/commit/20a981b6aff0bbf3ff04d5b016f67bf76545f3cd)), closes [#3159](https://github.com/patternfly/patternfly-react/issues/3159) - - - - - -## [2.10.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.10.7...@patternfly/react-topology@2.10.8) (2019-10-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.10.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.10.6...@patternfly/react-topology@2.10.7) (2019-10-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.10.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.10.5...@patternfly/react-topology@2.10.6) (2019-10-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.10.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.10.4...@patternfly/react-topology@2.10.5) (2019-10-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.10.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.10.3...@patternfly/react-topology@2.10.4) (2019-10-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.10.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.10.2...@patternfly/react-topology@2.10.3) (2019-10-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.10.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.10.1...@patternfly/react-topology@2.10.2) (2019-10-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.10.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.10.0...@patternfly/react-topology@2.10.1) (2019-10-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [2.10.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.9.7...@patternfly/react-topology@2.10.0) (2019-10-18) - - -### Features - -* **docs:** use gatsby-theme-patternfly-org ([#3146](https://github.com/patternfly/patternfly-react/issues/3146)) ([93c843b](https://github.com/patternfly/patternfly-react/commit/93c843b)) - - - - - -## [2.9.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.9.6...@patternfly/react-topology@2.9.7) (2019-10-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.9.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.9.5...@patternfly/react-topology@2.9.6) (2019-10-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.9.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.9.4...@patternfly/react-topology@2.9.5) (2019-10-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.9.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.9.3...@patternfly/react-topology@2.9.4) (2019-10-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.9.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.9.2...@patternfly/react-topology@2.9.3) (2019-10-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.9.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.9.1...@patternfly/react-topology@2.9.2) (2019-10-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.9.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.9.0...@patternfly/react-topology@2.9.1) (2019-10-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [2.9.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.82...@patternfly/react-topology@2.9.0) (2019-10-11) - - -### Features - -* **tooltip:** allow tooltip text to be left-aligned ([#3053](https://github.com/patternfly/patternfly-react/issues/3053)) ([d369c07](https://github.com/patternfly/patternfly-react/commit/d369c07)) - - - - - -## [2.8.82](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.81...@patternfly/react-topology@2.8.82) (2019-10-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.81](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.80...@patternfly/react-topology@2.8.81) (2019-10-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.80](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.79...@patternfly/react-topology@2.8.80) (2019-10-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.79](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.78...@patternfly/react-topology@2.8.79) (2019-10-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.78](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.77...@patternfly/react-topology@2.8.78) (2019-10-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.77](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.76...@patternfly/react-topology@2.8.77) (2019-10-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.76](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.75...@patternfly/react-topology@2.8.76) (2019-10-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.75](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.74...@patternfly/react-topology@2.8.75) (2019-10-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.74](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.73...@patternfly/react-topology@2.8.74) (2019-10-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.73](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.72...@patternfly/react-topology@2.8.73) (2019-10-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.72](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.71...@patternfly/react-topology@2.8.72) (2019-10-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.71](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.70...@patternfly/react-topology@2.8.71) (2019-10-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.70](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.69...@patternfly/react-topology@2.8.70) (2019-10-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.69](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.68...@patternfly/react-topology@2.8.69) (2019-10-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.68](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.67...@patternfly/react-topology@2.8.68) (2019-10-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.67](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.66...@patternfly/react-topology@2.8.67) (2019-10-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.66](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.65...@patternfly/react-topology@2.8.66) (2019-10-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.65](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.64...@patternfly/react-topology@2.8.65) (2019-09-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.64](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.63...@patternfly/react-topology@2.8.64) (2019-09-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.63](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.62...@patternfly/react-topology@2.8.63) (2019-09-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.62](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.61...@patternfly/react-topology@2.8.62) (2019-09-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.61](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.60...@patternfly/react-topology@2.8.61) (2019-09-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.60](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.59...@patternfly/react-topology@2.8.60) (2019-09-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.59](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.58...@patternfly/react-topology@2.8.59) (2019-09-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.58](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.57...@patternfly/react-topology@2.8.58) (2019-09-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.57](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.56...@patternfly/react-topology@2.8.57) (2019-09-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.56](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.55...@patternfly/react-topology@2.8.56) (2019-09-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.55](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.54...@patternfly/react-topology@2.8.55) (2019-09-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.54](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.53...@patternfly/react-topology@2.8.54) (2019-09-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.53](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.52...@patternfly/react-topology@2.8.53) (2019-09-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.52](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.51...@patternfly/react-topology@2.8.52) (2019-09-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.51](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.50...@patternfly/react-topology@2.8.51) (2019-09-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.50](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.49...@patternfly/react-topology@2.8.50) (2019-09-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.49](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.48...@patternfly/react-topology@2.8.49) (2019-09-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.48](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.47...@patternfly/react-topology@2.8.48) (2019-09-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.47](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.46...@patternfly/react-topology@2.8.47) (2019-09-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.46](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.45...@patternfly/react-topology@2.8.46) (2019-09-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.45](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.44...@patternfly/react-topology@2.8.45) (2019-09-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.44](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.43...@patternfly/react-topology@2.8.44) (2019-09-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.43](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.42...@patternfly/react-topology@2.8.43) (2019-09-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.41...@patternfly/react-topology@2.8.42) (2019-09-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.40...@patternfly/react-topology@2.8.41) (2019-09-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.40](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.39...@patternfly/react-topology@2.8.40) (2019-09-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.38...@patternfly/react-topology@2.8.39) (2019-09-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.37...@patternfly/react-topology@2.8.38) (2019-09-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.36...@patternfly/react-topology@2.8.37) (2019-09-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.35...@patternfly/react-topology@2.8.36) (2019-09-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.34...@patternfly/react-topology@2.8.35) (2019-09-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.33...@patternfly/react-topology@2.8.34) (2019-09-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.32...@patternfly/react-topology@2.8.33) (2019-09-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.31...@patternfly/react-topology@2.8.32) (2019-09-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.30...@patternfly/react-topology@2.8.31) (2019-09-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.29...@patternfly/react-topology@2.8.30) (2019-09-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.28...@patternfly/react-topology@2.8.29) (2019-09-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.27...@patternfly/react-topology@2.8.28) (2019-09-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.26...@patternfly/react-topology@2.8.27) (2019-09-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.25...@patternfly/react-topology@2.8.26) (2019-09-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.24...@patternfly/react-topology@2.8.25) (2019-09-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.23...@patternfly/react-topology@2.8.24) (2019-09-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.22...@patternfly/react-topology@2.8.23) (2019-09-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.21...@patternfly/react-topology@2.8.22) (2019-09-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.20...@patternfly/react-topology@2.8.21) (2019-09-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.19...@patternfly/react-topology@2.8.20) (2019-09-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.18...@patternfly/react-topology@2.8.19) (2019-09-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.17...@patternfly/react-topology@2.8.18) (2019-09-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.16...@patternfly/react-topology@2.8.17) (2019-09-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.15...@patternfly/react-topology@2.8.16) (2019-09-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.14...@patternfly/react-topology@2.8.15) (2019-09-04) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.13...@patternfly/react-topology@2.8.14) (2019-09-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.12...@patternfly/react-topology@2.8.13) (2019-09-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.11...@patternfly/react-topology@2.8.12) (2019-08-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.10...@patternfly/react-topology@2.8.11) (2019-08-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.9...@patternfly/react-topology@2.8.10) (2019-08-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.8...@patternfly/react-topology@2.8.9) (2019-08-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.7...@patternfly/react-topology@2.8.8) (2019-08-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.6...@patternfly/react-topology@2.8.7) (2019-08-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.5...@patternfly/react-topology@2.8.6) (2019-08-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.4...@patternfly/react-topology@2.8.5) (2019-08-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.3...@patternfly/react-topology@2.8.4) (2019-08-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.2...@patternfly/react-topology@2.8.3) (2019-08-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.1...@patternfly/react-topology@2.8.2) (2019-08-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.8.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.8.0...@patternfly/react-topology@2.8.1) (2019-08-26) - - -### Bug Fixes - -* **tooltip:** allow manul trigger, access to tippy.js props ([#2769](https://github.com/patternfly/patternfly-react/issues/2769)) ([de6b211](https://github.com/patternfly/patternfly-react/commit/de6b211)) - - - - - -# [2.8.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.44...@patternfly/react-topology@2.8.0) (2019-08-26) - - -### Features - -* **Button:** Added OUIA compatibility to Button component ([#2710](https://github.com/patternfly/patternfly-react/issues/2710)) ([d96116c](https://github.com/patternfly/patternfly-react/commit/d96116c)), closes [#2425](https://github.com/patternfly/patternfly-react/issues/2425) - - - - - -## [2.7.44](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.43...@patternfly/react-topology@2.7.44) (2019-08-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.43](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.42...@patternfly/react-topology@2.7.43) (2019-08-23) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.41...@patternfly/react-topology@2.7.42) (2019-08-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.40...@patternfly/react-topology@2.7.41) (2019-08-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.40](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.39...@patternfly/react-topology@2.7.40) (2019-08-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.38...@patternfly/react-topology@2.7.39) (2019-08-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.37...@patternfly/react-topology@2.7.38) (2019-08-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.36...@patternfly/react-topology@2.7.37) (2019-08-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.35...@patternfly/react-topology@2.7.36) (2019-08-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.34...@patternfly/react-topology@2.7.35) (2019-08-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.33...@patternfly/react-topology@2.7.34) (2019-08-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.32...@patternfly/react-topology@2.7.33) (2019-08-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.31...@patternfly/react-topology@2.7.32) (2019-08-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.30...@patternfly/react-topology@2.7.31) (2019-08-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.29...@patternfly/react-topology@2.7.30) (2019-08-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.28...@patternfly/react-topology@2.7.29) (2019-08-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.27...@patternfly/react-topology@2.7.28) (2019-08-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.26...@patternfly/react-topology@2.7.27) (2019-08-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.25...@patternfly/react-topology@2.7.26) (2019-08-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.24...@patternfly/react-topology@2.7.25) (2019-08-13) - - -### Bug Fixes - -* **inline-styles:** remove inject and Stylesheet.parse inline references ([#2653](https://github.com/patternfly/patternfly-react/issues/2653)) ([ee2ca95](https://github.com/patternfly/patternfly-react/commit/ee2ca95)) - - - - - -## [2.7.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.23...@patternfly/react-topology@2.7.24) (2019-08-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.22...@patternfly/react-topology@2.7.23) (2019-08-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.21...@patternfly/react-topology@2.7.22) (2019-08-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.20...@patternfly/react-topology@2.7.21) (2019-08-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.19...@patternfly/react-topology@2.7.20) (2019-08-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.18...@patternfly/react-topology@2.7.19) (2019-08-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.17...@patternfly/react-topology@2.7.18) (2019-08-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.16...@patternfly/react-topology@2.7.17) (2019-08-07) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.15...@patternfly/react-topology@2.7.16) (2019-08-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.14...@patternfly/react-topology@2.7.15) (2019-08-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.13...@patternfly/react-topology@2.7.14) (2019-08-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.12...@patternfly/react-topology@2.7.13) (2019-08-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.11...@patternfly/react-topology@2.7.12) (2019-08-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.10...@patternfly/react-topology@2.7.11) (2019-08-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.9...@patternfly/react-topology@2.7.10) (2019-08-02) - - -### Bug Fixes - -* **Topology:** Fix paddings for topology control bar buttons ([#2635](https://github.com/patternfly/patternfly-react/issues/2635)) ([a8aa582](https://github.com/patternfly/patternfly-react/commit/a8aa582)) - - - - - -## [2.7.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.8...@patternfly/react-topology@2.7.9) (2019-08-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.7...@patternfly/react-topology@2.7.8) (2019-07-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.6...@patternfly/react-topology@2.7.7) (2019-07-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.5...@patternfly/react-topology@2.7.6) (2019-07-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.4...@patternfly/react-topology@2.7.5) (2019-07-30) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.3...@patternfly/react-topology@2.7.4) (2019-07-29) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.2...@patternfly/react-topology@2.7.3) (2019-07-26) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.1...@patternfly/react-topology@2.7.2) (2019-07-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.7.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.7.0...@patternfly/react-topology@2.7.1) (2019-07-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [2.7.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.21...@patternfly/react-topology@2.7.0) (2019-07-25) - - -### Features - -* **Tooltip:** Added support for aria prop from Tippy library ([#2539](https://github.com/patternfly/patternfly-react/issues/2539)) ([54dce53](https://github.com/patternfly/patternfly-react/commit/54dce53)), closes [#1458](https://github.com/patternfly/patternfly-react/issues/1458) - - - - - -## [2.6.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.20...@patternfly/react-topology@2.6.21) (2019-07-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.19...@patternfly/react-topology@2.6.20) (2019-07-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.18...@patternfly/react-topology@2.6.19) (2019-07-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.17...@patternfly/react-topology@2.6.18) (2019-07-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.16...@patternfly/react-topology@2.6.17) (2019-07-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.15...@patternfly/react-topology@2.6.16) (2019-07-22) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.14...@patternfly/react-topology@2.6.15) (2019-07-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.13...@patternfly/react-topology@2.6.14) (2019-07-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.12...@patternfly/react-topology@2.6.13) (2019-07-17) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.11...@patternfly/react-topology@2.6.12) (2019-07-16) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.10...@patternfly/react-topology@2.6.11) (2019-07-15) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.9...@patternfly/react-topology@2.6.10) (2019-07-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.8...@patternfly/react-topology@2.6.9) (2019-07-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.7...@patternfly/react-topology@2.6.8) (2019-07-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.6...@patternfly/react-topology@2.6.7) (2019-07-11) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.5...@patternfly/react-topology@2.6.6) (2019-07-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.4...@patternfly/react-topology@2.6.5) (2019-07-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.3...@patternfly/react-topology@2.6.4) (2019-07-10) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.2...@patternfly/react-topology@2.6.3) (2019-07-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.1...@patternfly/react-topology@2.6.2) (2019-07-09) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.6.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.6.0...@patternfly/react-topology@2.6.1) (2019-07-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [2.6.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.5.9...@patternfly/react-topology@2.6.0) (2019-07-08) - - -### Features - -* **Toolbar:** Convert toolbar to typescript ([#2475](https://github.com/patternfly/patternfly-react/issues/2475)) ([b508e5d](https://github.com/patternfly/patternfly-react/commit/b508e5d)) - - - - - -## [2.5.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.5.8...@patternfly/react-topology@2.5.9) (2019-07-08) - - -### Bug Fixes - -* **build:** make pf3/pf4 build on windows ([#2471](https://github.com/patternfly/patternfly-react/issues/2471)) ([5bbc4a2](https://github.com/patternfly/patternfly-react/commit/5bbc4a2)) - - - - - -## [2.5.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.5.7...@patternfly/react-topology@2.5.8) (2019-07-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.5.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.5.6...@patternfly/react-topology@2.5.7) (2019-07-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.5.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.5.5...@patternfly/react-topology@2.5.6) (2019-07-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.5.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.5.4...@patternfly/react-topology@2.5.5) (2019-07-08) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.5.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.5.3...@patternfly/react-topology@2.5.4) (2019-07-06) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.5.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.5.2...@patternfly/react-topology@2.5.3) (2019-07-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.5.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.5.1...@patternfly/react-topology@2.5.2) (2019-07-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.5.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.5.0...@patternfly/react-topology@2.5.1) (2019-07-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [2.5.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.27...@patternfly/react-topology@2.5.0) (2019-07-05) - - -### Features - -* **Stack:** Convert stack to typescript ([#2412](https://github.com/patternfly/patternfly-react/issues/2412)) ([a1c34b6](https://github.com/patternfly/patternfly-react/commit/a1c34b6)) - - - - - -## [2.4.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.26...@patternfly/react-topology@2.4.27) (2019-07-05) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.25...@patternfly/react-topology@2.4.26) (2019-07-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.24...@patternfly/react-topology@2.4.25) (2019-07-03) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.23...@patternfly/react-topology@2.4.24) (2019-07-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.22...@patternfly/react-topology@2.4.23) (2019-07-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.21...@patternfly/react-topology@2.4.22) (2019-07-02) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.20...@patternfly/react-topology@2.4.21) (2019-07-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.19...@patternfly/react-topology@2.4.20) (2019-07-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.18...@patternfly/react-topology@2.4.19) (2019-07-01) - - -### Bug Fixes - -* **tooltip:** revert tippy2 upgrade ([#2326](https://github.com/patternfly/patternfly-react/issues/2326)) ([#2414](https://github.com/patternfly/patternfly-react/issues/2414)) ([3e919e3](https://github.com/patternfly/patternfly-react/commit/3e919e3)) - - - - - -## [2.4.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.17...@patternfly/react-topology@2.4.18) (2019-07-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.16...@patternfly/react-topology@2.4.17) (2019-07-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.15...@patternfly/react-topology@2.4.16) (2019-07-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.14...@patternfly/react-topology@2.4.15) (2019-07-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.13...@patternfly/react-topology@2.4.14) (2019-07-01) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.12...@patternfly/react-topology@2.4.13) (2019-06-28) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.11...@patternfly/react-topology@2.4.12) (2019-06-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.10...@patternfly/react-topology@2.4.11) (2019-06-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.9...@patternfly/react-topology@2.4.10) (2019-06-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.8...@patternfly/react-topology@2.4.9) (2019-06-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.7...@patternfly/react-topology@2.4.8) (2019-06-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.6...@patternfly/react-topology@2.4.7) (2019-06-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.5...@patternfly/react-topology@2.4.6) (2019-06-27) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.4...@patternfly/react-topology@2.4.5) (2019-06-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.3...@patternfly/react-topology@2.4.4) (2019-06-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.2...@patternfly/react-topology@2.4.3) (2019-06-25) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.4.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.1...@patternfly/react-topology@2.4.2) (2019-06-24) - - -### Bug Fixes - -* **topology:** Fix react-topology distribution JS ([#2330](https://github.com/patternfly/patternfly-react/issues/2330)) ([2f4e6e8](https://github.com/patternfly/patternfly-react/commit/2f4e6e8)) - - - - - -## [2.4.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.4.0...@patternfly/react-topology@2.4.1) (2019-06-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [2.4.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.3.8...@patternfly/react-topology@2.4.0) (2019-06-24) - - -### Features - -* **tippy:** upgrade tippy deps and apply api changes ([#2326](https://github.com/patternfly/patternfly-react/issues/2326)) ([b2dc2e2](https://github.com/patternfly/patternfly-react/commit/b2dc2e2)) - - - - - -## [2.3.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.3.7...@patternfly/react-topology@2.3.8) (2019-06-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.3.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.3.6...@patternfly/react-topology@2.3.7) (2019-06-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.3.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.3.5...@patternfly/react-topology@2.3.6) (2019-06-24) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.3.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.3.4...@patternfly/react-topology@2.3.5) (2019-06-21) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.3.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.3.3...@patternfly/react-topology@2.3.4) (2019-06-21) - - -### Bug Fixes - -* **topology:** Remove utility PF from control bar buttons ([#2319](https://github.com/patternfly/patternfly-react/issues/2319)) ([ad2fc23](https://github.com/patternfly/patternfly-react/commit/ad2fc23)) - - - - - -## [2.3.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.3.2...@patternfly/react-topology@2.3.3) (2019-06-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.3.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.3.1...@patternfly/react-topology@2.3.2) (2019-06-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.3.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.3.0...@patternfly/react-topology@2.3.1) (2019-06-20) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [2.3.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.15...@patternfly/react-topology@2.3.0) (2019-06-20) - - -### Features - -* ** topology-sidebar:** Adds TopologySidebar to react-topology ([#2286](https://github.com/patternfly/patternfly-react/issues/2286)) ([a5dc8bb](https://github.com/patternfly/patternfly-react/commit/a5dc8bb)) - - - - - -## [2.2.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.14...@patternfly/react-topology@2.2.15) (2019-06-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.2.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.13...@patternfly/react-topology@2.2.14) (2019-06-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.2.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.12...@patternfly/react-topology@2.2.13) (2019-06-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.2.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.11...@patternfly/react-topology@2.2.12) (2019-06-19) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.2.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.10...@patternfly/react-topology@2.2.11) (2019-06-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.2.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.9...@patternfly/react-topology@2.2.10) (2019-06-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.2.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.8...@patternfly/react-topology@2.2.9) (2019-06-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.2.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.7...@patternfly/react-topology@2.2.8) (2019-06-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.2.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.6...@patternfly/react-topology@2.2.7) (2019-06-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.2.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.4...@patternfly/react-topology@2.2.6) (2019-06-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.2.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.4...@patternfly/react-topology@2.2.5) (2019-06-18) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.2.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.3...@patternfly/react-topology@2.2.4) (2019-06-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.2.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.2...@patternfly/react-topology@2.2.3) (2019-06-14) - - -### Bug Fixes - -* **react-icons:** add noVerticalAlign prop to d.ts file ([#2238](https://github.com/patternfly/patternfly-react/issues/2238)) ([c50143c](https://github.com/patternfly/patternfly-react/commit/c50143c)), closes [#2237](https://github.com/patternfly/patternfly-react/issues/2237) - - - - - -## [2.2.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.1...@patternfly/react-topology@2.2.2) (2019-06-14) - - -### Bug Fixes - -* **topology:** add tslint.json ([#2247](https://github.com/patternfly/patternfly-react/issues/2247)) ([991280b](https://github.com/patternfly/patternfly-react/commit/991280b)) - - - - - -## [2.2.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.2.0...@patternfly/react-topology@2.2.1) (2019-06-14) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -# [2.2.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.1.6...@patternfly/react-topology@2.2.0) (2019-06-13) - - -### Features - -* **build:** add source maps ([#2142](https://github.com/patternfly/patternfly-react/issues/2142)) ([5076c48](https://github.com/patternfly/patternfly-react/commit/5076c48)) - - - - - -## [2.1.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.1.5...@patternfly/react-topology@2.1.6) (2019-06-13) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.1.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.1.4...@patternfly/react-topology@2.1.5) (2019-06-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.1.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.1.3...@patternfly/react-topology@2.1.4) (2019-06-12) - - -### Bug Fixes - -* **topology:** Fixes JS dist for react-topology ([#2230](https://github.com/patternfly/patternfly-react/issues/2230)) ([337510a](https://github.com/patternfly/patternfly-react/commit/337510a)) - - - - - -## [2.1.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.1.2...@patternfly/react-topology@2.1.3) (2019-06-12) - -**Note:** Version bump only for package @patternfly/react-topology - - - - - -## [2.1.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.1.1...@patternfly/react-topology@2.1.2) (2019-06-12) - - -### Bug Fixes - -* **release:** Version bump to distribute previous changes ([#2224](https://github.com/patternfly/patternfly-react/issues/2224)) ([9dcd53f](https://github.com/patternfly/patternfly-react/commit/9dcd53f)) - - - - - -## [2.1.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-topology@2.1.0...@patternfly/react-topology@2.1.1) (2019-06-11) - - -### Bug Fixes - -* **topology-view:** Do not hard code margins on view components ([#2217](https://github.com/patternfly/patternfly-react/issues/2217)) ([69e8a42](https://github.com/patternfly/patternfly-react/commit/69e8a42)) - - - - - -# 2.1.0 (2019-06-11) - - -### Features - -* **Topology:** Add @patternfly/react-topology package ([#2170](https://github.com/patternfly/patternfly-react/issues/2170)) ([58eb9cc](https://github.com/patternfly/patternfly-react/commit/58eb9cc)) diff --git a/packages/react-topology/README.md b/packages/react-topology/README.md deleted file mode 100644 index bc36c8aa8df..00000000000 --- a/packages/react-topology/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# @patternfly/react-topology - -This package provides Topology View components based on [PatternFly 4][patternfly-4] - -### Prerequisites - -#### Node Environment - -This project currently supports Node [Active LTS](https://github.com/nodejs/Release#release-schedule) releases. Please stay current with Node Active LTS when developing patternfly-react. - -For example, to develop with Node 8, use the following: - -``` -nvm install 8 -nvm use 8 -``` - -This project also requires a Yarn version of >=1.6.0. The latest version can be installed [here](https://yarnpkg.com/). - -### Installing - -``` -yarn add @patternfly/react-topology -``` - -or - -``` -npm install @patternfly/react-topology --save -``` - -## Usage - -It's strongly advised to use the PatternFly Base CSS in your whole project, or some components may diverge in appearance: - -```js -import '@patternfly/react-core/dist/styles/base.css'; -``` - diff --git a/packages/react-topology/package.json b/packages/react-topology/package.json deleted file mode 100644 index 2f4b0e12133..00000000000 --- a/packages/react-topology/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "@patternfly/react-topology", - "version": "4.90.38", - "description": "This library provides a set of React topology view components for use with the PatternFly 4", - "main": "dist/js/index.js", - "module": "dist/esm/index.js", - "types": "dist/esm/index.d.ts", - "publishConfig": { - "access": "public", - "tag": "prerelease" - }, - "repository": { - "type": "git", - "url": "https://github.com/patternfly/patternfly-react.git" - }, - "keywords": [ - "react", - "patternfly", - "topology" - ], - "author": "Red Hat", - "license": "MIT", - "bugs": { - "url": "https://github.com/patternfly/patternfly-react/issues" - }, - "homepage": "https://github.com/patternfly/patternfly-react/tree/main/packages/react-topology#readme", - "scripts": { - "clean": "rimraf dist" - }, - "dependencies": { - "@patternfly/react-core": "^4.267.6", - "@patternfly/react-icons": "^4.93.3", - "@patternfly/react-styles": "^4.92.3", - "@types/d3": "^5.7.2", - "@types/d3-force": "^1.2.1", - "@types/dagre": "0.7.42", - "@types/react-measure": "^2.0.6", - "@types/webcola": "3.2.0", - "d3": "^5.16.0", - "dagre": "0.8.2", - "lodash": "^4.17.19", - "mobx": "^5.15.4", - "mobx-react": "^6.2.0", - "point-in-svg-path": "^1.0.1", - "popper.js": "^1.16.1", - "react-measure": "^2.3.0", - "tslib": "^2.0.0", - "webcola": "3.4.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17 || ^18", - "react-dom": "^16.8 || ^17 || ^18" - }, - "devDependencies": { - "rimraf": "^2.6.2", - "typescript": "^4.7.4" - } -} diff --git a/packages/react-topology/src/Visualization.ts b/packages/react-topology/src/Visualization.ts deleted file mode 100644 index 71988b10f32..00000000000 --- a/packages/react-topology/src/Visualization.ts +++ /dev/null @@ -1,358 +0,0 @@ -import { ComponentType } from 'react'; -import { action, computed, observable } from 'mobx'; -import * as _ from 'lodash'; -import { - Controller, - Graph, - Edge, - Node, - ComponentFactory, - GraphElement, - ElementFactory, - ElementModel, - isEdge, - isNode, - Model, - EventListener, - ModelKind, - LayoutFactory, - Layout, - ViewPaddingSettings, - GRAPH_LAYOUT_END_EVENT, - GraphLayoutEndEventListener -} from './types'; -import defaultElementFactory from './elements/defaultElementFactory'; -import Stateful from './utils/Stateful'; - -export class Visualization extends Stateful implements Controller { - @observable.shallow - elements: { [id: string]: GraphElement } = {}; - - @observable.ref - private graph?: Graph; - - @observable - private viewConstraintsEnabled: boolean = true; - - @observable.ref - private viewPaddingSettings: ViewPaddingSettings = { - paddingPercentage: 50 - }; - - @computed - private get viewPadding(): number { - const { padding, paddingPercentage } = this.viewPaddingSettings; - if (paddingPercentage) { - const graph = this.graph; - if (!graph) { - return 0; - } - const { width: viewWidth, height: viewHeight } = graph.getBounds(); - return Math.max(viewWidth, viewHeight) * graph.getScale() * (paddingPercentage / 100); - } - return padding; - } - - private layoutFactories: LayoutFactory[] = []; - - private componentFactories: ComponentFactory[] = []; - - private elementFactories: ElementFactory[] = [defaultElementFactory]; - - private eventListeners: { [type: string]: EventListener[] } = {}; - - private fitToScreenListener: GraphLayoutEndEventListener; - - @observable.shallow - private readonly store = {}; - - getStore(): S { - return this.store as S; - } - - @action - fromModel(model: Model, merge: boolean = true): void { - const oldGraph = this.graph; - - // If not merging, clear out the old elements - if (!merge) { - _.forIn(this.elements, element => this.removeElement(element)); - } - - // Create the graph if given in the model - if (model.graph) { - this.graph = this.createElement(ModelKind.graph, model.graph); - if (!merge && oldGraph) { - this.graph.setDimensions(oldGraph.getDimensions()); - } - } - - // Create elements - const validIds: string[] = []; - const idToElement: { [id: string]: ElementModel } = {}; - - model.nodes && - model.nodes.forEach(n => { - idToElement[n.id] = n; - this.createElement(ModelKind.node, n); - validIds.push(n.id); - }); - - model.edges && - model.edges.forEach(e => { - idToElement[e.id] = e; - this.createElement(ModelKind.edge, e); - validIds.push(e.id); - }); - - // merge data - if (model.graph && this.graph) { - this.graph.setModel(model.graph); - } - validIds.push(this.graph.getId()); - - const processed: { [id: string]: boolean } = {}; - - // process bottom up - const processElement = (element: ElementModel): void => { - if (element.children) { - element.children.forEach(id => processElement(idToElement[id])); - } - if (!processed[element.id]) { - processed[element.id] = true; - this.elements[element.id].setModel(element); - } - }; - - model.nodes && model.nodes.forEach(processElement); - model.edges && model.edges.forEach(processElement); - - // remove all stale elements - if (merge) { - _.forIn(this.elements, element => { - if (!validIds.includes(element.getId())) { - this.removeElement(element); - } - }); - - if (oldGraph && oldGraph !== this.graph) { - this.removeElement(oldGraph); - } - } - - if (this.graph) { - this.parentOrphansToGraph(this.graph, validIds); - } - } - - hasGraph(): boolean { - return !!this.graph; - } - - getGraph(): Graph { - if (!this.graph) { - throw new Error('Graph has not been set.'); - } - return this.graph; - } - - @action - setGraph(graph: Graph) { - if (this.graph !== graph) { - if (this.graph) { - this.graph.setController(undefined); - } - this.graph = graph; - graph.setController(this); - // TODO clean up and populate registries - } - } - - getElements(): GraphElement[] { - return _.values(this.elements); - } - - toModel(): Model { - const graph = this.getGraph(); - const nodes = this.getElements().filter(n => isNode(n)) as Node[]; - const edges = this.getElements().filter(e => isEdge(e)) as Edge[]; - return { - graph: graph.toModel(), - nodes: nodes.map(n => n.toModel()), - edges: edges.map(e => e.toModel()) - }; - } - - addElement(element: GraphElement): void { - if (this.elements[element.getId()]) { - throw new Error(`Duplicate element for ID '${element.getId()}`); - } - element.setController(this); - this.elements[element.getId()] = element; - } - - removeElement(element: GraphElement): void { - if (this.elements[element.getId()]) { - element.remove(); - // unparent all of the element's children such that they can be reparented - element - .getChildren() - .slice() - .forEach(child => child.remove()); - element.destroy(); - element.setController(undefined); - delete this.elements[element.getId()]; - } - } - - getElementById(id: string): GraphElement | undefined { - return this.elements[id]; - } - - getNodeById(id: string): Node | undefined { - const node = this.elements[id]; - if (node && isNode(node)) { - return node; - } - return undefined; - } - - getEdgeById(id: string): Edge | undefined { - const edge = this.elements[id]; - if (edge && isEdge(edge)) { - return edge; - } - return undefined; - } - - getComponent(kind: ModelKind, type: string): ComponentType<{ element: GraphElement }> { - for (const factory of this.componentFactories) { - const component = factory(kind, type); - if (component) { - return component; - } - } - throw new Error(`Could not find component for: Kind '${kind}', Type '${type}'`); - } - - registerLayoutFactory(factory: LayoutFactory) { - this.layoutFactories.unshift(factory); - } - - getLayout(type: string): Layout | undefined { - for (const factory of this.layoutFactories) { - const layout = factory(type, this.getGraph()); - if (layout) { - return layout; - } - } - throw new Error(`Could not find layout for type: ${type}`); - } - - setRenderConstraint(constrained: boolean, viewPadding?: ViewPaddingSettings) { - this.viewConstraintsEnabled = constrained; - - // only update the view padding if given, this makes for ease of turning on/off w/o losing settings - if (viewPadding !== undefined) { - this.viewPaddingSettings = viewPadding; - } - } - - setFitToScreenOnLayout(fitToScreen: boolean, padding: number = 80): void { - if (this.fitToScreenListener) { - this.removeEventListener(GRAPH_LAYOUT_END_EVENT, this.fitToScreenListener); - } - - if (fitToScreen) { - this.fitToScreenListener = ({ graph }): void => { - graph.fit(padding); - }; - this.addEventListener(GRAPH_LAYOUT_END_EVENT, this.fitToScreenListener); - return; - } - } - - shouldRenderNode(node: Node): boolean { - if (!this.viewConstraintsEnabled) { - return true; - } - return this.graph.isNodeInView(node, { padding: this.viewPadding }); - } - - registerComponentFactory(factory: ComponentFactory) { - this.componentFactories.unshift(factory); - } - - registerElementFactory(factory: ElementFactory): void { - this.elementFactories.unshift(factory); - } - - addEventListener(type: string, listener: L): Controller { - if (!this.eventListeners[type]) { - this.eventListeners[type] = [listener]; - } else { - this.eventListeners[type].push(listener); - } - return this; - } - - removeEventListener(type: string, listener: EventListener): Controller { - if (!this.eventListeners[type]) { - return this; - } - const listeners = this.eventListeners[type]; - const l: EventListener[] = []; - for (let i = 0, { length } = listeners; i < length; i++) { - if (listeners[i] !== listener) { - l.push(listeners[i]); - } - } - if (l.length) { - this.eventListeners[type] = l; - } else { - delete this.eventListeners[type]; - } - return this; - } - - fireEvent(type: string, ...args: any): void { - const listeners = this.eventListeners[type]; - if (listeners) { - for (let i = 0, { length } = listeners; i < length; i++) { - listeners[i](...args); - } - } - } - - private createElement(kind: ModelKind, elementModel: ElementModel): E { - const existingElement = this.elements[elementModel.id]; - if (existingElement) { - return existingElement as E; - } - for (const factory of this.elementFactories) { - const element = factory(kind, elementModel.type); - if (element) { - this.initElement(element, elementModel); - // cast to return type - return element as E; - } - } - throw new Error(`Could not create element for: ${JSON.stringify(elementModel)}`); - } - - private initElement(element: GraphElement, model: ElementModel): void { - // set require fields - element.setId(model.id); - element.setType(model.type); - element.setController(this); - this.addElement(element); - } - - private parentOrphansToGraph(graph: Graph, validIds: string[]): void { - this.getElements().forEach((element: GraphElement) => { - if (element !== this.graph && (!element.hasParent() || !validIds.includes(element.getParent().getId()))) { - graph.appendChild(element); - } - }); - } -} diff --git a/packages/react-topology/src/__tests__/Visualization.spec.ts b/packages/react-topology/src/__tests__/Visualization.spec.ts deleted file mode 100644 index 5f6dc460b8c..00000000000 --- a/packages/react-topology/src/__tests__/Visualization.spec.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Visualization } from '../Visualization'; - -describe('Visualization', () => { - it('should clean up old graph model', () => { - const visualization = new Visualization(); - - expect(visualization.getElementById('a')).toBeUndefined(); - visualization.fromModel({ - graph: { - id: 'a', - type: 'graph', - }, - }); - const graphA = visualization.getElementById('a'); - expect(graphA).not.toBeUndefined(); - - if (!graphA) { - fail(); - return; - } - - graphA.destroy = jest.fn(); - - visualization.fromModel({ - graph: { - id: 'b', - type: 'graph', - }, - }); - expect(visualization.getElementById('a')).toBeUndefined(); - expect(visualization.getElementById('b')).not.toBeUndefined(); - expect(graphA.destroy).toHaveBeenCalledTimes(1); - }); -}); diff --git a/packages/react-topology/src/anchors/AbstractAnchor.ts b/packages/react-topology/src/anchors/AbstractAnchor.ts deleted file mode 100644 index ba67bdc275f..00000000000 --- a/packages/react-topology/src/anchors/AbstractAnchor.ts +++ /dev/null @@ -1,25 +0,0 @@ -import Point from '../geom/Point'; -import { Anchor, Node } from '../types'; - -export default abstract class AbstractAnchor implements Anchor { - protected readonly owner: E; - - // Consumption of the offset depends on the concrete anchor implementation but it is - // indended that the reference point is moved by the offset relative to the point location - // in the direction of the opposing reference point. - protected readonly offset: number; - - constructor(owner: E, offset: number = 0) { - this.owner = owner; - this.offset = offset; - } - - abstract getLocation(reference: Point): Point; - - getReferencePoint(): Point { - return this.owner - .getBounds() - .getCenter() - .translate(this.offset, this.offset); - } -} diff --git a/packages/react-topology/src/anchors/CenterAnchor.ts b/packages/react-topology/src/anchors/CenterAnchor.ts deleted file mode 100644 index c27a86deb34..00000000000 --- a/packages/react-topology/src/anchors/CenterAnchor.ts +++ /dev/null @@ -1,14 +0,0 @@ -import Point from '../geom/Point'; -import AbstractAnchor from './AbstractAnchor'; -import { getEllipseAnchorPoint } from '../utils/anchor-utils'; - -export default class CenterAnchor extends AbstractAnchor { - getLocation(reference: Point): Point { - const bounds = this.owner.getBounds(); - if (this.offset === 0) { - return bounds.getCenter(); - } - const offset2x = this.offset * 2; - return getEllipseAnchorPoint(bounds.getCenter(), offset2x, offset2x, reference); - } -} diff --git a/packages/react-topology/src/anchors/EllipseAnchor.ts b/packages/react-topology/src/anchors/EllipseAnchor.ts deleted file mode 100644 index e3e088b74e6..00000000000 --- a/packages/react-topology/src/anchors/EllipseAnchor.ts +++ /dev/null @@ -1,15 +0,0 @@ -import Point from '../geom/Point'; -import { getEllipseAnchorPoint } from '../utils/anchor-utils'; -import AbstractAnchor from './AbstractAnchor'; - -export default class EllipseAnchor extends AbstractAnchor { - getLocation(reference: Point): Point { - const r = this.owner.getBounds(); - if (r.isEmpty()) { - return r.getCenter(); - } - - const offset2x = this.offset * 2; - return getEllipseAnchorPoint(r.getCenter(), r.width + offset2x, r.height + offset2x, reference); - } -} diff --git a/packages/react-topology/src/anchors/PolygonAnchor.ts b/packages/react-topology/src/anchors/PolygonAnchor.ts deleted file mode 100644 index 9f72dcf9acc..00000000000 --- a/packages/react-topology/src/anchors/PolygonAnchor.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { observable } from 'mobx'; -import Point from '../geom/Point'; -import { distanceToPoint, getLinesIntersection } from '../utils/anchor-utils'; -import AbstractAnchor from './AbstractAnchor'; -import { Rect } from '../geom'; -import { PointTuple } from '../types'; - -export default class PolygonAnchor extends AbstractAnchor { - @observable.ref - private points?: Point[]; - - setPoints(points: PointTuple[]) { - this.points = points?.map(p => new Point(p[0], p[1])); - } - - getLocation(reference: Point): Point { - let bestPoint: Point = new Point(0, 0); - - if (this.points) { - const translatedRef = reference.clone(); - this.owner.translateFromParent(translatedRef); - - let bestDistance = Infinity; - const bbox = this.getBoundingBox(); - - for (let i = 0; i < this.points.length; i++) { - const intersectPoint: Point | null = getLinesIntersection( - [this.points[i], this.points[i === this.points.length - 1 ? 0 : i + 1]], - [bbox.getCenter(), translatedRef] - ); - if (intersectPoint) { - const intersectDistance: number = distanceToPoint(intersectPoint, translatedRef); - if (intersectDistance < bestDistance) { - bestPoint = intersectPoint; - bestDistance = intersectDistance; - } - } - } - } - - this.owner.translateToParent(bestPoint); - return bestPoint; - } - - getBoundingBox(): Rect { - if (this.points?.length) { - const bbox: Rect = new Rect(this.points[0].x, this.points[0].y); - for (let i = 1; i < this.points.length; i++) { - bbox.union(new Rect(this.points[i].x, this.points[i].y)); - } - return bbox; - } - return new Rect(0, 0); - } - - getReferencePoint(): Point { - if (this.points?.length) { - const bbox: Rect = this.getBoundingBox(); - const ref = bbox.getCenter(); - this.owner.translateToParent(ref); - - // touch the bounds to force a re-render in case this anchor is for a group - this.owner.getBounds(); - - return ref; - } - - return super.getReferencePoint(); - } -} diff --git a/packages/react-topology/src/anchors/RectAnchor.ts b/packages/react-topology/src/anchors/RectAnchor.ts deleted file mode 100644 index e2a637d6bb6..00000000000 --- a/packages/react-topology/src/anchors/RectAnchor.ts +++ /dev/null @@ -1,16 +0,0 @@ -import Point from '../geom/Point'; -import { getRectAnchorPoint } from '../utils/anchor-utils'; -import AbstractAnchor from './AbstractAnchor'; - -export default class RectAnchor extends AbstractAnchor { - getLocation(reference: Point): Point { - const r = this.owner.getBounds(); - const center = r.getCenter(); - if (r.isEmpty()) { - return center; - } - - const offset2x = this.offset * 2; - return getRectAnchorPoint(center, r.width + offset2x, r.height + offset2x, reference); - } -} diff --git a/packages/react-topology/src/anchors/SVGAnchor.ts b/packages/react-topology/src/anchors/SVGAnchor.ts deleted file mode 100644 index 9967e61e9e6..00000000000 --- a/packages/react-topology/src/anchors/SVGAnchor.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { observable } from 'mobx'; -import Point from '../geom/Point'; -import { - getEllipseAnchorPoint, - getPathAnchorPoint, - getPolygonAnchorPoint, - getRectAnchorPoint -} from '../utils/anchor-utils'; -import AbstractAnchor from './AbstractAnchor'; - -export default class SVGAnchor extends AbstractAnchor { - @observable.ref - private svgElement?: SVGElement; - - setSVGElement(svgElement: SVGElement) { - this.svgElement = svgElement; - } - - private getCircleLocation(circle: SVGCircleElement, reference: Point): Point { - const center: Point = new Point(circle.cx.baseVal.value, circle.cy.baseVal.value); - this.owner.translateToParent(center); - const diameter = circle.r.baseVal.value * 2 + this.offset * 2; - - return getEllipseAnchorPoint(center, diameter, diameter, reference); - } - - private getEllipseLocation(ellipse: SVGEllipseElement, reference: Point): Point { - const center: Point = new Point(ellipse.cx.baseVal.value, ellipse.cy.baseVal.value); - this.owner.translateToParent(center); - const offset2x = this.offset * 2; - const width = ellipse.rx.baseVal.value * 2 + offset2x; - const height = ellipse.ry.baseVal.value * 2 + offset2x; - - return getEllipseAnchorPoint(center, width, height, reference); - } - - private getRectLocation(rect: SVGRectElement, reference: Point): Point { - const width = rect.width.baseVal.value; - const height = rect.height.baseVal.value; - - const center: Point = new Point(rect.x.baseVal.value + width / 2, rect.y.baseVal.value + height / 2); - this.owner.translateToParent(center); - - const offset2x = this.offset * 2; - return getRectAnchorPoint(center, width + offset2x, height + offset2x, reference); - } - - private getPathLocation(path: SVGPathElement, reference: Point): Point { - const translatedRef = reference.clone(); - this.owner.translateFromParent(translatedRef); - const anchorPoint = getPathAnchorPoint(path, translatedRef); - this.owner.translateToParent(anchorPoint); - return anchorPoint; - } - - private getPolygonLocation(polygon: SVGPolygonElement, reference: Point): Point { - const translatedRef = reference.clone(); - this.owner.translateFromParent(translatedRef); - const anchorPoint = getPolygonAnchorPoint(polygon, translatedRef); - this.owner.translateToParent(anchorPoint); - return anchorPoint; - } - - getLocation(reference: Point): Point { - if (this.svgElement && this.svgElement.viewportElement) { - if (this.svgElement instanceof SVGCircleElement) { - return this.getCircleLocation(this.svgElement, reference); - } - - if (this.svgElement instanceof SVGEllipseElement) { - return this.getEllipseLocation(this.svgElement, reference); - } - - if (this.svgElement instanceof SVGRectElement) { - return this.getRectLocation(this.svgElement, reference); - } - - if (this.svgElement instanceof SVGPathElement) { - return this.getPathLocation(this.svgElement, reference); - } - - if (this.svgElement instanceof SVGPolygonElement) { - return this.getPolygonLocation(this.svgElement, reference); - } - } - - return this.owner.getBounds().getCenter(); - } - - getReferencePoint(): Point { - if ( - this.svgElement && - this.svgElement.viewportElement && - (this.svgElement instanceof SVGCircleElement || - this.svgElement instanceof SVGEllipseElement || - this.svgElement instanceof SVGRectElement || - this.svgElement instanceof SVGPathElement || - this.svgElement instanceof SVGPolygonElement) - ) { - const bbox = this.svgElement.getBBox(); - const ref = new Point(bbox.x + bbox.width / 2, bbox.y + bbox.height / 2); - - // this touches the bounds for non-groups - this.owner.translateToParent(ref); - - // touch the bounds to force a re-render in case this anchor is for a group - this.owner.getBounds(); - - return ref; - } - - return super.getReferencePoint(); - } -} diff --git a/packages/react-topology/src/anchors/__tests__/AbstractAnchor.spec.ts b/packages/react-topology/src/anchors/__tests__/AbstractAnchor.spec.ts deleted file mode 100644 index 94885c7bf14..00000000000 --- a/packages/react-topology/src/anchors/__tests__/AbstractAnchor.spec.ts +++ /dev/null @@ -1,36 +0,0 @@ -import AbstractAnchor from '../AbstractAnchor'; -import { Node } from '../../types'; -import { Point, Rect } from '../../geom'; -import { BaseNode } from '../../elements'; - -class TestAnchor extends AbstractAnchor { - getOwner(): Node { - return this.owner; - } - - getOffset() { - return this.offset; - } - - getLocation(): Point { - return Point.EMPTY; - } -} - -describe('AbstractAnchor', () => { - it('should have an owner and offset', () => { - const node = new BaseNode(); - let anchor = new TestAnchor(node); - expect(anchor.getOffset()).toBe(0); - expect(anchor.getOwner()).toBe(node); - anchor = new TestAnchor(node, 10); - expect(anchor.getOffset()).toBe(10); - }); - - it('should default to node center reference point', () => { - const node = new BaseNode(); - node.setBounds(new Rect(0, 0, 10, 10)); - expect(new TestAnchor(node).getReferencePoint()).toEqual({ x: 5, y: 5 }); - expect(new TestAnchor(node, 4).getReferencePoint()).toEqual({ x: 9, y: 9 }); - }); -}); diff --git a/packages/react-topology/src/anchors/__tests__/CenterAnchor.spec.ts b/packages/react-topology/src/anchors/__tests__/CenterAnchor.spec.ts deleted file mode 100644 index 30db6a0e4c7..00000000000 --- a/packages/react-topology/src/anchors/__tests__/CenterAnchor.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import CenterAnchor from '../CenterAnchor'; -import { Rect, Point } from '../../geom'; -import { BaseNode } from '../../elements'; - -describe('CenterAnchor', () => { - it('should return node center location', () => { - const node = new BaseNode(); - node.setBounds(new Rect(4, 5, 0, 0)); - expect(new CenterAnchor(node).getLocation(new Point())).toEqual({ x: 4, y: 5 }); - }); - - it('should return node anchor location', () => { - const node = new BaseNode(); - node.setBounds(new Rect(0, 0, 10, 10)); - expect(new CenterAnchor(node).getLocation(new Point(10, 5))).toEqual({ x: 5, y: 5 }); - expect(new CenterAnchor(node, 4).getLocation(new Point(100, 5))).toEqual({ x: 9, y: 5 }); - expect(new CenterAnchor(node, 4).getLocation(new Point(5, 100))).toEqual({ x: 5, y: 9 }); - }); - - it('should return node center reference point', () => { - const node = new BaseNode(); - node.setBounds(new Rect(0, 0, 10, 10)); - expect(new CenterAnchor(node).getReferencePoint()).toEqual({ x: 5, y: 5 }); - }); -}); diff --git a/packages/react-topology/src/anchors/__tests__/EllipseAnchor.spec.ts b/packages/react-topology/src/anchors/__tests__/EllipseAnchor.spec.ts deleted file mode 100644 index a88e26bef57..00000000000 --- a/packages/react-topology/src/anchors/__tests__/EllipseAnchor.spec.ts +++ /dev/null @@ -1,38 +0,0 @@ -import EllipseAnchor from '../EllipseAnchor'; -import { Rect, Point } from '../../geom'; -import { BaseNode } from '../../elements'; - -describe('EllipseAnchor', () => { - it('should return node center location', () => { - const node = new BaseNode(); - node.setBounds(new Rect(4, 5, 0, 0)); - expect(new EllipseAnchor(node).getLocation(new Point())).toEqual({ x: 4, y: 5 }); - }); - - it('should return node anchor location', () => { - const node = new BaseNode(); - node.setBounds(new Rect(0, 0, 10, 10)); - expect(new EllipseAnchor(node).getLocation(new Point(100, 5))).toEqual({ x: 10, y: 5 }); - expect(new EllipseAnchor(node).getLocation(new Point(5, 100))).toEqual({ x: 5, y: 10 }); - expect(new EllipseAnchor(node, 4).getLocation(new Point(100, 5))).toEqual({ x: 14, y: 5 }); - expect(new EllipseAnchor(node, 4).getLocation(new Point(5, 100))).toEqual({ x: 5, y: 14 }); - - // 45deg angle - let point45 = 5 * Math.cos(45 * (Math.PI / 180)) + 5; - let loc = new EllipseAnchor(node).getLocation(new Point(100, 100)); - expect(loc.x).toBeCloseTo(point45); - expect(loc.y).toBeCloseTo(point45); - - // 45deg angle with offset - point45 = 9 * Math.cos(45 * (Math.PI / 180)) + 5; - loc = new EllipseAnchor(node, 4).getLocation(new Point(100, 100)); - expect(loc.x).toBeCloseTo(point45); - expect(loc.y).toBeCloseTo(point45); - }); - - it('should return node center reference point', () => { - const node = new BaseNode(); - node.setBounds(new Rect(0, 0, 10, 10)); - expect(new EllipseAnchor(node).getReferencePoint()).toEqual({ x: 5, y: 5 }); - }); -}); diff --git a/packages/react-topology/src/anchors/__tests__/RectAnchor.spec.ts b/packages/react-topology/src/anchors/__tests__/RectAnchor.spec.ts deleted file mode 100644 index ee584609ba3..00000000000 --- a/packages/react-topology/src/anchors/__tests__/RectAnchor.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -import RectAnchor from '../RectAnchor'; -import { Rect, Point } from '../../geom'; -import { BaseNode } from '../../elements'; - -describe('RectAnchor', () => { - it('should return node center location', () => { - const node = new BaseNode(); - node.setBounds(new Rect(4, 5, 0, 0)); - expect(new RectAnchor(node).getLocation(new Point())).toEqual({ x: 4, y: 5 }); - }); - - it('should return node anchor location', () => { - const node = new BaseNode(); - node.setBounds(new Rect(0, 0, 10, 10)); - expect(new RectAnchor(node).getLocation(new Point(100, 5))).toEqual({ x: 10, y: 5 }); - expect(new RectAnchor(node).getLocation(new Point(5, 100))).toEqual({ x: 5, y: 10 }); - - expect(new RectAnchor(node).getLocation(new Point(100, 100))).toEqual({ x: 10, y: 10 }); - expect(new RectAnchor(node, 4).getLocation(new Point(100, 5))).toEqual({ x: 14, y: 5 }); - expect(new RectAnchor(node, 4).getLocation(new Point(5, 100))).toEqual({ x: 5, y: 14 }); - expect(new RectAnchor(node, 4).getLocation(new Point(100, 100))).toEqual({ x: 14, y: 14 }); - }); - - it('should return node center reference point', () => { - const node = new BaseNode(); - node.setBounds(new Rect(0, 0, 10, 10)); - expect(new RectAnchor(node).getReferencePoint()).toEqual({ x: 5, y: 5 }); - }); -}); diff --git a/packages/react-topology/src/anchors/index.ts b/packages/react-topology/src/anchors/index.ts deleted file mode 100644 index 7e8dd94fbf8..00000000000 --- a/packages/react-topology/src/anchors/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export { default as AbstractAnchor } from './AbstractAnchor'; -export { default as CenterAnchor } from './CenterAnchor'; -export { default as EllipseAnchor } from './EllipseAnchor'; -export { default as RectAnchor } from './RectAnchor'; -export { default as PolygonAnchor } from './PolygonAnchor'; -export { default as SVGAnchor } from './SVGAnchor'; diff --git a/packages/react-topology/src/behavior/dnd-types.ts b/packages/react-topology/src/behavior/dnd-types.ts deleted file mode 100644 index 80660515ca8..00000000000 --- a/packages/react-topology/src/behavior/dnd-types.ts +++ /dev/null @@ -1,180 +0,0 @@ -// TODO support Symbols -export type Identifier = string; - -export type TargetType = Identifier | Identifier[]; - -export type SourceType = Identifier; - -export interface DragObjectWithType { - type: SourceType; -} - -export type DragOperationType = Identifier; - -export interface DragOperationWithType { - type: DragOperationType; -} - -export interface DragEvent { - // in subject coordinates - initialX: number; - initialY: number; - x: number; - y: number; - dx: number; - dy: number; - // in page coordinates - initialPageX: number; - initialPageY: number; - pageX: number; - pageY: number; -} - -export interface DragSource { - type: SourceType; - canDrag(dndManager: DndManager): boolean; - beginDrag(dndManager: DndManager): any; - drag(dndManager: DndManager): void; - endDrag(dndManager: DndManager): void | Promise; - canCancel(dndManager: DndManager): boolean; -} - -export interface DropTarget { - type: TargetType; - dropHint(dndManager: DndManager): string | undefined; - drop(dndManager: DndManager): any; - hover(dndManager: DndManager): void; - canDrop(dndManager: DndManager): boolean; - hitTest(x: number, y: number): boolean; -} - -export interface DndState { - isDragging?: boolean; - sourceId?: string; - targetIds?: string[]; - itemType?: string; - item?: any; - dropResult?: any; - didDrop?: boolean; - event?: DragEvent; - operation?: DragOperationWithType; - cancelled?: boolean; -} - -export interface DndStateContainer { - dragDrop: DndState; -} - -export type Unregister = () => void; - -export interface DndManager { - registerSource(source: DragSource): [string, Unregister]; - registerTarget(target: DropTarget): [string, Unregister]; - getDropHints(): string[]; - canDragSource(sourceId: string | undefined): boolean; - canDropOnTarget(targetId: string | undefined): boolean; - hasDropTarget(): boolean; - isDragging(): boolean; - isDraggingSource(sourceId: string | undefined): boolean; - isOverTarget( - targetId: string | undefined, - options?: { - shallow?: boolean; - } - ): boolean; - isCancelled(): boolean; - getItemType(): Identifier | undefined; - getItem(): any; - getSourceId(): string | undefined; - getTargetIds(): string[]; - getDropResult(): any; - didDrop(): boolean; - getDragEvent(): DragEvent | undefined; - getOperation(): DragOperationWithType | undefined; - beginDrag( - sourceIds: string | string[], - operation: DragOperationWithType | undefined, - x: number, - y: number, - pageX: number, - pageY: number - ): void; - hover(targetIds: string[]): void; - endDrag(): Promise; - drag(x: number, y: number, pageX: number, pageY: number): void; - drop(): void; - cancel(): boolean; -} - -export interface DndStore { - dndManager: DndManager; -} - -// TODO address type such that useRef work without cast to any -export type DragElementWrapper = (elementOrNode: Element | null) => void; -// | React.RefObject; - -export type ConnectDragSource = DragElementWrapper; -export type ConnectDropTarget = DragElementWrapper; - -export type DragSpecOperationType = T | { [ModifierFlags: number]: T }; - -export interface DragSourceSpec< - DragObject extends DragObjectWithType = DragObjectWithType, - DragSpecOperation extends DragSpecOperationType = DragSpecOperationType, - DropResult = any, - CollectedProps extends {} = {}, - Props extends {} = {} -> { - item: DragObject; - operation?: ((monitor: DragSourceMonitor, props: Props) => DragSpecOperation) | DragSpecOperation; - begin?: (monitor: DragSourceMonitor, props: Props) => any; - drag?: (event: DragEvent, monitor: DragSourceMonitor, props: Props) => void; - end?: (dropResult: DropResult | undefined, monitor: DragSourceMonitor, props: Props) => void | Promise; - canDrag?: boolean | ((monitor: DragSourceMonitor, props: Props) => boolean); - collect?: (monitor: DragSourceMonitor, props: Props) => CollectedProps; - canCancel?: boolean | ((monitor: DragSourceMonitor, props: Props) => boolean); -} - -export interface DropTargetSpec { - accept: TargetType; - dropHint?: string | ((item: DragObject, monitor: DropTargetMonitor, props: Props) => string | undefined); - hitTest?: (x: number, y: number, props: Props) => boolean; - drop?: (item: DragObject, monitor: DropTargetMonitor, props: Props) => DropResult | undefined; - hover?: (item: DragObject, monitor: DropTargetMonitor, props: Props) => void; - canDrop?: boolean | ((item: DragObject, monitor: DropTargetMonitor, props: Props) => boolean); - collect?: (monitor: DropTargetMonitor, props: Props) => CollectedProps; -} - -export interface HandlerManager { - receiveHandlerId: (handlerId: string | undefined) => void; - getHandlerId: () => string | undefined; -} - -export interface DragSourceMonitor extends HandlerManager { - getDropHints(): string[]; - canDrag(): boolean; - isCancelled(): boolean; - isDragging(): boolean; - getItemType(): Identifier | undefined; - getItem(): any; - getDropResult(): any; - didDrop(): boolean; - getDragEvent(): DragEvent | undefined; - getOperation(): DragOperationWithType | undefined; -} - -export interface DropTargetMonitor extends HandlerManager { - canDrop(): boolean; - isCancelled(): boolean; - isDragging(): boolean; - isOver(options?: { shallow?: boolean }): boolean; - hasDropTarget(): boolean; - getDropHints(): string[]; - getItemType(): Identifier | undefined; - getItem(): any; - getDropResult(): any; - didDrop(): boolean; - getDragEvent(): DragEvent | undefined; - getOperation(): DragOperationWithType | undefined; -} diff --git a/packages/react-topology/src/behavior/index.ts b/packages/react-topology/src/behavior/index.ts deleted file mode 100644 index 728a0d1351e..00000000000 --- a/packages/react-topology/src/behavior/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -export * from './dnd-types'; -export * from './useAnchor'; -export * from './useBendpoint'; -export * from './useDndDrag'; -export * from './useDndDrop'; -export * from './useDndManager'; -export * from './useDragNode'; -export * from './usePanZoom'; -export * from './useReconnect'; -export * from './useSelection'; -export * from './usePolygonAnchor'; -export * from './useSvgAnchor'; -export * from './withContextMenu'; -export * from './withCreateConnector'; -export * from './withRemoveConnector'; diff --git a/packages/react-topology/src/behavior/useAddBendpoint.tsx.bak b/packages/react-topology/src/behavior/useAddBendpoint.tsx.bak deleted file mode 100644 index 4ae510c13a2..00000000000 --- a/packages/react-topology/src/behavior/useAddBendpoint.tsx.bak +++ /dev/null @@ -1,58 +0,0 @@ -import * as React from 'react'; -import { action } from 'mobx'; -import * as d3 from 'd3'; -import { observer } from 'mobx-react'; -import Point from '../geom/Point'; -import EntityContext from '../utils/EntityContext'; -import { isEdgeEntity, PointTuple } from '../types'; -import { - ConnectDragSource, - DragSourceSpec, - DragEvent, - DragObjectWithType, - DragSourceMonitor, -} from './dnd-types'; -import { useDndDrag, WithDndDragProps } from './dndDrag'; - -export const useAddBendpoint = (): any => { - const entity = React.useContext(EntityContext); - if (!isEdgeEntity(entity)) { - throw new Error('useAddBendpoint must be used within the scope of an EdgeEntity'); - } - const entityRef = React.useRef(entity); - entityRef.current = entity; - - const [point, setPoint] = React.useState(null); - - // argh react events don't play nice with d3 pan zoom double click event - const ref = React.useCallback((node) => { - d3.select(node).on('mouseover.addBendpoint', () => { - if (d3.event.shiftKey) { - d3.event.stopPropagation(); - entityRef.current.removeBendpoint(pointRef.current); - } - }); - dragRef(node); - }, []); - return [point, ref]; -}; - -type HocProps = { - point: Point; -}; - -export type WithBendpointProps = { - dragNodeRef: WithDndDragProps['dndDragRef']; -}; - -export const WithBendpoint = ( - spec?: Omit, 'type'>, -) =>

( - WrappedComponent: React.ComponentType

, -) => { - const Component: React.FunctionComponent & HocProps> = (props) => { - const [dragProps, bendpointRef] = useBendpoint(props.point, spec, props); - return ; - }; - return observer(Component); -}; diff --git a/packages/react-topology/src/behavior/useAnchor.tsx b/packages/react-topology/src/behavior/useAnchor.tsx deleted file mode 100644 index a45ef58dfd1..00000000000 --- a/packages/react-topology/src/behavior/useAnchor.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import * as React from 'react'; -import { runInAction } from 'mobx'; -import { observer } from 'mobx-react'; -import { isNode, Anchor, Node, AnchorEnd } from '../types'; -import ElementContext from '../utils/ElementContext'; - -type AnchorConstructor = new (element?: Node) => Anchor; - -export const useAnchor = ( - anchorCallback: ((element: Node) => Anchor | undefined) | AnchorConstructor, - end: AnchorEnd = AnchorEnd.both, - type?: string -): void => { - const element = React.useContext(ElementContext); - if (!isNode(element)) { - throw new Error('useAnchor must be used within the scope of a Node'); - } - React.useEffect(() => { - runInAction(() => { - const anchor = anchorCallback.prototype ? new (anchorCallback as any)(element) : (anchorCallback as any)(element); - if (anchor) { - element.setAnchor(anchor, end, type); - } - }); - }, [anchorCallback, element, end, type]); -}; - -export const withAnchor =

(anchor: Anchor, end?: AnchorEnd, type?: string) => ( - WrappedComponent: React.ComponentType

-) => { - const Component: React.FunctionComponent

= props => { - useAnchor( - React.useCallback(() => anchor, []), - end, - type - ); - return ; - }; - Component.displayName = `withAnchor(${WrappedComponent.displayName || WrappedComponent.name})`; - return observer(Component); -}; diff --git a/packages/react-topology/src/behavior/useBendpoint.tsx b/packages/react-topology/src/behavior/useBendpoint.tsx deleted file mode 100644 index ec31a2715ae..00000000000 --- a/packages/react-topology/src/behavior/useBendpoint.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import * as React from 'react'; -import { action } from 'mobx'; -import * as d3 from 'd3'; -import { observer } from 'mobx-react'; -import Point from '../geom/Point'; -import ElementContext from '../utils/ElementContext'; -import { isEdge } from '../types'; -import { - ConnectDragSource, - DragSourceSpec, - DragObjectWithType, - DragSpecOperationType, - DragOperationWithType -} from './dnd-types'; -import { useDndDrag, WithDndDragProps } from './useDndDrag'; - -export interface WithBendpoint { - sourceDragRef: ConnectDragSource; -} - -export const useBendpoint = ( - point: Point, - spec?: Omit< - DragSourceSpec, DropResult, CollectedProps>, - 'type' - >, - props?: Props -): [CollectedProps, ConnectDragSource] => { - const element = React.useContext(ElementContext); - if (!isEdge(element)) { - throw new Error('useBendpoint must be used within the scope of an Edge'); - } - const elementRef = React.useRef(element); - elementRef.current = element; - const pointRef = React.useRef(point); - pointRef.current = point; - - const [connect, dragRef] = useDndDrag( - React.useMemo(() => { - const sourceSpec: DragSourceSpec = { - item: { type: '#useBendpoint#' }, - begin: (monitor, p) => (spec && spec.begin ? spec.begin(monitor, p) : undefined), - drag: (event, monitor, p) => { - // assumes the edge is in absolute coordinate space - pointRef.current.translate(event.dx, event.dy); - elementRef.current.raise(); - spec && spec.drag && spec.drag(event, monitor, p); - }, - canDrag: spec ? spec.canDrag : undefined, - end: spec ? spec.end : undefined, - collect: spec ? spec.collect : undefined - }; - return sourceSpec; - }, [spec]), - props - ); - - // argh react events don't play nice with d3 pan zoom double click event - const ref = React.useCallback( - node => { - d3.select(node).on( - 'click', - action(() => { - if (d3.event.shiftKey) { - d3.event.stopPropagation(); - elementRef.current.removeBendpoint(pointRef.current); - } - }) - ); - dragRef(node); - }, - [dragRef] - ); - return [connect, ref]; -}; - -interface HocProps { - point: Point; -} - -export interface WithBendpointProps { - dragNodeRef: WithDndDragProps['dndDragRef']; -} - -export const withBendpoint = ( - spec?: Omit< - DragSourceSpec, DropResult, CollectedProps, Props>, - 'type' - > -) =>

(WrappedComponent: React.ComponentType

) => { - const Component: React.FunctionComponent & HocProps> = props => { - const [dragProps, bendpointRef] = useBendpoint(props.point, spec as any, props); - return ; - }; - Component.displayName = `withBendpoint(${WrappedComponent.displayName || WrappedComponent.name})`; - return observer(Component); -}; - -/** - * @deprecated Use withBendpoint instead - */ -export const WithBendpoint = withBendpoint; diff --git a/packages/react-topology/src/behavior/useDndDrag.tsx b/packages/react-topology/src/behavior/useDndDrag.tsx deleted file mode 100644 index 0d55fcb2aea..00000000000 --- a/packages/react-topology/src/behavior/useDndDrag.tsx +++ /dev/null @@ -1,324 +0,0 @@ -import * as React from 'react'; -import * as d3 from 'd3'; -import { action, computed, comparer, runInAction } from 'mobx'; -import { observer } from 'mobx-react'; -import { canUseDOM } from '@patternfly/react-core/dist/esm/helpers/util'; -import ElementContext from '../utils/ElementContext'; -import useCallbackRef from '../utils/useCallbackRef'; -import { - DragSourceSpec, - ConnectDragSource, - DragObjectWithType, - DragSourceMonitor, - Identifier, - DragEvent, - DragSpecOperationType, - DragSource, - DragOperationWithType, - DragElementWrapper -} from './dnd-types'; -import { useDndManager } from './useDndManager'; - -export const Modifiers = { - DEFAULT: 0, - ALT: 0x01, - CTRL: 0x02, - META: 0x04, - SHIFT: 0x08 -}; - -const getModifiers = (event: MouseEvent | TouchEvent | KeyboardEvent): number => { - let modifiers = Modifiers.DEFAULT; - if (event.altKey) { - // eslint-disable-next-line no-bitwise - modifiers |= Modifiers.ALT; - } - if (event.ctrlKey) { - // eslint-disable-next-line no-bitwise - modifiers |= Modifiers.CTRL; - } - if (event.metaKey) { - // eslint-disable-next-line no-bitwise - modifiers |= Modifiers.META; - } - if (event.shiftKey) { - // eslint-disable-next-line no-bitwise - modifiers |= Modifiers.SHIFT; - } - return modifiers; -}; - -const getOperation = ( - operation: DragSpecOperationType | undefined -): DragOperationWithType | undefined => { - if (!operation) { - return undefined; - } - if (operation.hasOwnProperty('type')) { - return operation as DragOperationWithType; - } - return operation[getModifiers((d3.event && d3.event.sourceEvent) || d3.event)] || operation[Modifiers.DEFAULT]; -}; - -const hasOperation = (operation: DragSpecOperationType | undefined): boolean => - !!(operation && (operation.hasOwnProperty('type') || Object.keys(operation).length > 0)); - -const EMPTY_PROPS = Object.freeze({}); - -export const useDndDrag = < - DragObject extends DragObjectWithType = DragObjectWithType, - DropResult = any, - CollectedProps extends {} = {}, - Props extends {} = {} ->( - spec: DragSourceSpec, DropResult, CollectedProps, Props>, - props?: Props -): [CollectedProps, ConnectDragSource] => { - const specRef = React.useRef(spec); - specRef.current = spec; - - const propsRef = React.useRef(props != null ? props : (EMPTY_PROPS as Props)); - propsRef.current = props != null ? props : (EMPTY_PROPS as Props); - - const dndManager = useDndManager(); - - const element = React.useContext(ElementContext); - const elementRef = React.useRef(element); - elementRef.current = element; - - const idRef = React.useRef(); - - // source monitor - const monitor = React.useMemo(() => { - const sourceMonitor: DragSourceMonitor = { - getHandlerId: (): string | undefined => idRef.current, - receiveHandlerId: (sourceId: string | undefined): void => { - idRef.current = sourceId; - }, - getDropHints: (): string[] => dndManager.getDropHints(), - canDrag: (): boolean => dndManager.canDragSource(idRef.current), - isDragging: (): boolean => dndManager.isDraggingSource(idRef.current), - getItemType: (): Identifier | undefined => dndManager.getItemType(), - getItem: (): any => dndManager.getItem(), - getDropResult: (): any => dndManager.getDropResult(), - didDrop: (): boolean => dndManager.didDrop(), - getDragEvent: (): DragEvent | undefined => dndManager.getDragEvent(), - getOperation: (): DragOperationWithType | undefined => dndManager.getOperation(), - isCancelled: (): boolean => dndManager.isCancelled() - }; - return sourceMonitor; - }, [dndManager]); - - const createKeyHandlerId = React.useCallback( - (event: string = '') => `${event}.useDndDrag-${monitor.getHandlerId()}`, - [monitor] - ); - - React.useEffect( - () => () => { - if (canUseDOM) { - d3.select(window.document).on(createKeyHandlerId(), null); - } - if (dndManager.isDragging() && dndManager.getSourceId() === monitor.getHandlerId()) { - dndManager.endDrag(); - } - }, - [] - ); - - const refCallback: DragElementWrapper = useCallbackRef( - React.useCallback( - (node: SVGElement | Element | null) => { - let ownerDocument: Document; - if (node) { - ownerDocument = node.ownerDocument; - let operationChangeEvents: - | { - begin: [number, number, number, number]; - drag: [number, number, number, number]; - } - | undefined; - let operation: DragSpecOperationType | undefined; - d3.select(node).call( - d3 - .drag() - .container( - // TODO bridge the gap between scene tree and dom tree - () => { - const selected = - node instanceof SVGElement ? d3.select(node.ownerSVGElement) : d3.select(ownerDocument); - return selected.select('[data-surface="true"]').node() as any; - } - ) - .on('start', function() { - operation = - typeof specRef.current.operation === 'function' - ? specRef.current.operation(monitor, propsRef.current) - : specRef.current.operation; - const updateOperation = action(async () => { - if (operation && idRef.current) { - const op = getOperation(operation); - if (dndManager.getOperation() !== op) { - // restart the drag with the new operation - if (dndManager.isDragging()) { - // copy the event otherwise it will be mutated by #cancel() - const event = { ...(dndManager.getDragEvent() as DragEvent) }; - const cancelled = dndManager.cancel(); - operationChangeEvents = { - begin: [ - cancelled ? event.initialX : event.x, - cancelled ? event.initialY : event.y, - cancelled ? event.initialPageX : event.pageX, - cancelled ? event.initialPageY : event.pageY - ], - drag: [event.x, event.y, event.pageX, event.pageY] - }; - await dndManager.endDrag(); - } - if (op && operationChangeEvents) { - runInAction(() => { - dndManager.beginDrag(idRef.current, op, ...operationChangeEvents.begin); - dndManager.drag(...operationChangeEvents.drag); - operationChangeEvents = undefined; - }); - } - } - } - }); - d3.select(ownerDocument) - .on( - createKeyHandlerId('keydown'), - action(() => { - const e = d3.event as KeyboardEvent; - if (e.key === 'Escape') { - if (dndManager.isDragging() && dndManager.cancel()) { - operationChangeEvents = undefined; - d3.select(d3.event.view).on('.drag', null); - d3.select(ownerDocument).on(createKeyHandlerId(), null); - dndManager.endDrag(); - } - } else { - updateOperation(); - } - }) - ) - .on(createKeyHandlerId('keyup'), updateOperation); - }) - .on( - 'drag', - action(() => { - const { pageX, pageY } = d3.event.sourceEvent; - const { x, y } = d3.event; - if (dndManager.isDragging()) { - dndManager.drag(x, y, pageX, pageY); - } else if (operationChangeEvents) { - operationChangeEvents.drag = [x, y, pageX, pageY]; - } else { - const op = getOperation(operation); - if (op || !hasOperation(operation)) { - if (idRef.current) { - dndManager.beginDrag(idRef.current, op, x, y, pageX, pageY); - } - } else { - operationChangeEvents = { - begin: [x, y, pageX, pageY], - drag: [x, y, pageX, pageY] - }; - } - } - }) - ) - .on( - 'end', - action(() => { - operationChangeEvents = undefined; - operation = undefined; - d3.select(ownerDocument).on(createKeyHandlerId(), null); - if (dndManager.isDragging()) { - dndManager.drop(); - dndManager.endDrag(); - } - }) - ) - .filter(() => !d3.event.ctrlKey && !d3.event.button && dndManager.canDragSource(idRef.current)) - ); - } - return () => { - if (node) { - d3.select(node).on('.drag', null); - } - }; - }, - [dndManager, monitor] - ) - ); - - React.useEffect(() => { - const dragSource: DragSource = { - type: spec.item.type, - canCancel: () => { - if (typeof specRef.current.canCancel === 'boolean') { - return specRef.current.canCancel; - } - if (typeof specRef.current.canCancel === 'function') { - return specRef.current.canCancel(monitor, propsRef.current); - } - return true; - }, - canDrag: () => { - if (typeof specRef.current.canDrag === 'boolean') { - return specRef.current.canDrag; - } - if (typeof specRef.current.canDrag === 'function') { - return specRef.current.canDrag(monitor, propsRef.current); - } - return true; - }, - beginDrag: () => (specRef.current.begin ? specRef.current.begin(monitor, propsRef.current) : undefined), - drag: () => { - if (specRef.current.drag) { - const event = monitor.getDragEvent(); - if (event) { - specRef.current.drag(event, monitor, propsRef.current); - } - } - }, - endDrag: () => - specRef.current.end ? specRef.current.end(monitor.getDropResult(), monitor, propsRef.current) : undefined - }; - const [sourceId, unregister] = dndManager.registerSource(dragSource); - monitor.receiveHandlerId(sourceId); - return unregister; - }, [spec.item.type, dndManager, monitor]); - - const collected = React.useMemo( - () => - computed(() => (spec.collect ? spec.collect(monitor, propsRef.current) : (({} as any) as CollectedProps)), { - equals: comparer.shallow - }), - [monitor, spec] - ); - - return [collected.get(), refCallback]; -}; - -export interface WithDndDragProps { - dndDragRef: ConnectDragSource; -} - -export const withDndDrag = < - DragObject extends DragObjectWithType = DragObjectWithType, - DropResult = any, - CollectedProps extends {} = {}, - Props extends {} = {} ->( - spec: DragSourceSpec, DropResult, CollectedProps, Props> -) =>

(WrappedComponent: React.ComponentType>) => { - const Component: React.FunctionComponent> = props => { - // TODO fix cast to any - const [dndDragProps, dndDragRef] = useDndDrag(spec, props as any); - return ; - }; - Component.displayName = `withDndDrag(${WrappedComponent.displayName || WrappedComponent.name})`; - return observer(Component); -}; diff --git a/packages/react-topology/src/behavior/useDndDrop.tsx b/packages/react-topology/src/behavior/useDndDrop.tsx deleted file mode 100644 index a19ce2b7284..00000000000 --- a/packages/react-topology/src/behavior/useDndDrop.tsx +++ /dev/null @@ -1,195 +0,0 @@ -import * as React from 'react'; -import * as d3 from 'd3'; -import { observer } from 'mobx-react'; -import { pointInSvgPath } from 'point-in-svg-path'; -import { comparer, computed } from 'mobx'; -import ElementContext from '../utils/ElementContext'; -import Point from '../geom/Point'; -import { GraphElement } from '../types'; -import { - ConnectDropTarget, - DropTargetSpec, - DropTargetMonitor, - Identifier, - DragEvent, - DropTarget, - DragOperationWithType -} from './dnd-types'; -import { useDndManager } from './useDndManager'; - -const EMPTY_PROPS = Object.freeze({}); - -export const useDndDrop = < - DragObject, - DropResult = GraphElement, - CollectedProps extends {} = {}, - Props extends {} = {} ->( - spec: DropTargetSpec, - props?: Props -): [CollectedProps, ConnectDropTarget] => { - const specRef = React.useRef(spec); - specRef.current = spec; - - const propsRef = React.useRef(props != null ? props : (EMPTY_PROPS as Props)); - propsRef.current = props != null ? props : (EMPTY_PROPS as Props); - - const dndManager = useDndManager(); - - const nodeRef = React.useRef(null); - const idRef = React.useRef(); - - const monitor = React.useMemo((): DropTargetMonitor => { - const targetMonitor: DropTargetMonitor = { - getHandlerId: (): string | undefined => idRef.current, - receiveHandlerId: (sourceId: string | undefined): void => { - idRef.current = sourceId; - }, - canDrop: (): boolean => dndManager.canDropOnTarget(idRef.current), - isDragging: (): boolean => dndManager.isDragging(), - hasDropTarget: (): boolean => dndManager.hasDropTarget(), - getDropHints: (): string[] => dndManager.getDropHints(), - isOver(options?: { shallow?: boolean }): boolean { - return dndManager.isOverTarget(idRef.current, options); - }, - getItemType: (): Identifier | undefined => dndManager.getItemType(), - getItem: (): any => dndManager.getItem(), - getDropResult: (): any => dndManager.getDropResult(), - didDrop: (): boolean => dndManager.didDrop(), - getDragEvent: (): DragEvent | undefined => dndManager.getDragEvent(), - getOperation: (): DragOperationWithType | undefined => dndManager.getOperation(), - isCancelled: (): boolean => dndManager.isCancelled() - }; - return targetMonitor; - }, [dndManager]); - - const element = React.useContext(ElementContext); - const elementRef = React.useRef(element); - elementRef.current = element; - - React.useEffect(() => { - const dropTarget: DropTarget = { - type: spec.accept, - dropHint: () => { - if (typeof specRef.current.dropHint === 'string') { - return specRef.current.dropHint; - } - if (typeof specRef.current.dropHint === 'function') { - return specRef.current.dropHint(monitor.getItem(), monitor, propsRef.current); - } - return elementRef.current.getType(); - }, - hitTest: (x: number, y: number) => { - if (specRef.current.hitTest) { - return specRef.current.hitTest(x, y, propsRef.current); - } - if (nodeRef.current) { - if (!(nodeRef.current instanceof SVGGraphicsElement)) { - return false; - } - - // Rounding the coordinates due to an issue with `point-in-svg-path` returning false - // when the coordinates clearly are within the path. - const point = Point.singleUse(Math.round(x), Math.round(y)); - // Translate to this element's coordinates. - // Assumes the node is not within an svg element containing another transform. - elementRef.current.translateFromAbsolute(point); - - // perform a fast bounds check - const { x: bboxx, y: bboxy, width, height } = nodeRef.current.getBBox(); - if (point.x < bboxx || point.x > bboxx + width || point.y < bboxy || point.y > bboxy + height) { - return false; - } - - if (nodeRef.current instanceof SVGPathElement) { - const d = nodeRef.current.getAttribute('d'); - return pointInSvgPath(d, point.x, point.y); - } - if (nodeRef.current instanceof SVGCircleElement) { - const { cx, cy, r } = nodeRef.current; - return Math.sqrt((point.x - cx.animVal.value) ** 2 + (point.y - cy.animVal.value) ** 2) < r.animVal.value; - } - if (nodeRef.current instanceof SVGEllipseElement) { - const { cx, cy, rx, ry } = nodeRef.current; - return ( - (point.x - cx.animVal.value) ** 2 / rx.animVal.value ** 2 + - (point.y - cy.animVal.value) ** 2 / ry.animVal.value ** 2 <= - 1 - ); - } - if (nodeRef.current instanceof SVGPolygonElement) { - const arr = (nodeRef.current.getAttribute('points') || '') - .replace(/,/g, ' ') - .split(' ') - .map(s => +s); - const points: [number, number][] = []; - for (let i = 0; i < arr.length; i += 2) { - points.push(arr.slice(i, i + 2) as [number, number]); - } - return d3.polygonContains(points, [point.x, point.y]); - } - // TODO support round rect - - // already passed the bbox test - return true; - } - return false; - }, - hover: () => { - specRef.current.hover && specRef.current.hover(monitor.getItem(), monitor, propsRef.current); - }, - canDrop: () => { - if (typeof specRef.current.canDrop === 'boolean') { - return specRef.current.canDrop; - } - if (typeof specRef.current.canDrop === 'function') { - return specRef.current.canDrop(monitor.getItem(), monitor, propsRef.current); - } - return true; - }, - drop: () => { - if (specRef.current.drop) { - return specRef.current.drop(monitor.getItem(), monitor, propsRef.current); - } - if (!monitor.didDrop()) { - return elementRef.current; - } - return undefined; - } - }; - const [targetId, unregister] = dndManager.registerTarget(dropTarget); - monitor.receiveHandlerId(targetId); - return unregister; - }, [spec.accept, dndManager, monitor]); - - const collected = React.useMemo( - () => - computed(() => (spec.collect ? spec.collect(monitor, propsRef.current) : (({} as any) as CollectedProps)), { - equals: comparer.shallow - }), - [monitor, spec] - ); - - return [collected.get(), nodeRef as any]; -}; - -export interface WithDndDropProps { - dndDropRef: ConnectDropTarget; -} - -export const withDndDrop = < - DragObject, - DropResult = GraphElement, - CollectedProps extends {} = {}, - Props extends {} = {} ->( - spec: DropTargetSpec -) =>

(WrappedComponent: React.ComponentType>) => { - const Component: React.FunctionComponent> = props => { - // TODO fix cast to any - const [dndDropProps, dndDropRef] = useDndDrop(spec, props as any); - return ; - }; - Component.displayName = `withDndDrop(${WrappedComponent.displayName || WrappedComponent.name})`; - return observer(Component); -}; diff --git a/packages/react-topology/src/behavior/useDndManager.tsx b/packages/react-topology/src/behavior/useDndManager.tsx deleted file mode 100644 index d41cb9ed5cb..00000000000 --- a/packages/react-topology/src/behavior/useDndManager.tsx +++ /dev/null @@ -1,358 +0,0 @@ -import { computed, observable, action, runInAction } from 'mobx'; -import useVisualizationController from '../hooks/useVisualizationController'; -import { - DndManager, - Identifier, - DropTarget, - DragEvent, - DndStore, - DragSource, - Unregister, - DndState, - DndStateContainer, - DragOperationWithType -} from './dnd-types'; - -let nextUniqueId = 0; - -const getNextUniqueId = (): number => nextUniqueId++; - -export const matchesType = ( - targetType: Identifier | Identifier[] | undefined, - draggedItemType: Identifier | undefined -): boolean => { - if (draggedItemType === null) { - return targetType === null; - } - return Array.isArray(targetType) ? targetType.some(t => t === draggedItemType) : targetType === draggedItemType; -}; - -export class DndManagerImpl implements DndManager { - private state: DndState; - - private ending: boolean = false; - - constructor(state: DndState) { - this.state = state; - } - - // TODO are these really required to be observable? - @observable.shallow - private sources: { [key: string]: DragSource } = {}; - - @observable.shallow - private targets: { [key: string]: DropTarget } = {}; - - @computed - get dropHints(): string[] { - return this.state.targetIds - ? (this.state.targetIds - .map(id => { - const target = this.getTarget(id); - return target ? target.dropHint(this) : []; - }) - .filter(x => x) as string[]) - : []; - } - - @action - registerSource(source: DragSource): [string, Unregister] { - const key = `S${getNextUniqueId()}`; - this.sources[key] = source; - return [ - key, - () => { - delete this.sources[key]; - } - ]; - } - - @action - registerTarget(target: DropTarget): [string, Unregister] { - const key = `T${getNextUniqueId()}`; - this.targets[key] = target; - return [ - key, - () => { - delete this.targets[key]; - } - ]; - } - - getDropHints(): string[] { - return this.dropHints; - } - - canDragSource(sourceId: string | undefined): boolean { - const source = this.getSource(sourceId); - if (!source || this.isDragging()) { - return false; - } - return source && source.canDrag(this); - } - - canDropOnTarget(targetId: string | undefined): boolean { - const target = this.getTarget(targetId); - if (!target || !this.isDragging() || this.didDrop()) { - return false; - } - - const draggedItemType = this.getItemType(); - return matchesType(target.type, draggedItemType) && target.canDrop(this); - } - - isDragging(): boolean { - return !!this.state.isDragging; - } - - isDraggingSource(sourceId: string | undefined): boolean { - return this.state.sourceId != null && this.state.sourceId === sourceId; - } - - isOverTarget(targetId: string | undefined, options = { shallow: false }): boolean { - if (!targetId) { - return false; - } - - const { shallow } = options; - if (!this.isDragging()) { - return false; - } - - const target = this.targets[targetId]; - const draggedItemType = this.getItemType(); - if (draggedItemType && !matchesType(target.type, draggedItemType)) { - return false; - } - - const targetIds = this.getTargetIds(); - if (!targetIds.length) { - return false; - } - - const index = targetIds.indexOf(targetId); - if (shallow) { - return index === targetIds.length - 1; - } - return index > -1; - } - - getItemType(): Identifier | undefined { - return this.state.itemType; - } - - getItem(): any { - return this.state.item; - } - - getSourceId(): string | undefined { - return this.state.sourceId; - } - - getTargetIds(): string[] { - return this.state.targetIds || []; - } - - hasDropTarget(): boolean { - return !!this.getTargetIds().find(id => this.canDropOnTarget(id)); - } - - getDropResult(): any { - return this.state.dropResult; - } - - didDrop(): boolean { - return !!this.state.didDrop; - } - - getDragEvent(): DragEvent | undefined { - return this.state.event; - } - - getOperation(): DragOperationWithType | undefined { - return this.state.operation; - } - - isCancelled(): boolean { - return !!this.state.cancelled; - } - - @action - beginDrag( - sourceIds: string | string[], - operation: DragOperationWithType | undefined, - x: number, - y: number, - pageX: number, - pageY: number - ): void { - const ids = Array.isArray(sourceIds) ? sourceIds : [sourceIds]; - if (ids.length) { - let sourceId: string | null = null; - for (let i = ids.length - 1; i >= 0; i--) { - if (this.canDragSource(ids[i])) { - sourceId = ids[i]; - break; - } - } - if (sourceId) { - const source = this.getSource(sourceId); - if (source) { - this.state.sourceId = sourceId; - this.state.itemType = source.type; - this.state.event = { - initialPageX: pageX, - initialPageY: pageY, - pageX, - pageY, - initialX: x, - initialY: y, - x, - y, - dx: 0, - dy: 0 - }; - this.state.operation = operation; - this.state.isDragging = true; - this.state.item = source.beginDrag(this); - } - } - } - this.performHitTests(); - } - - @action - hover(targetIds: string[]): void { - const ids: string[] = targetIds.filter(id => this.getTarget(id)); - this.state.targetIds = ids; - ids.forEach(id => { - const target = this.getTarget(id); - if (target) { - target.hover(this); - } - }); - } - - async endDrag(): Promise { - if (this.ending) { - return; - } - this.ending = true; - - const source = this.getSource(this.getSourceId()); - try { - if (source) { - await runInAction(() => source.endDrag(this)); - } - } finally { - this.ending = false; - runInAction(() => { - // clear state - delete this.state.didDrop; - delete this.state.dropResult; - delete this.state.event; - delete this.state.isDragging; - delete this.state.item; - delete this.state.sourceId; - delete this.state.targetIds; - delete this.state.operation; - delete this.state.cancelled; - }); - } - } - - @action - drop(): void { - this.getTargetIds() - .filter(id => this.canDropOnTarget(id)) - .reverse() - .forEach((id, idx) => { - const target = this.getTarget(id); - if (target) { - let result = target.drop(this); - if (typeof result === 'undefined') { - result = idx === 0 ? {} : this.state.dropResult; - } - this.state.dropResult = result; - this.state.didDrop = true; - } - }); - } - - @action - drag(x: number, y: number, pageX: number, pageY: number): void { - if (!this.state.event) { - throw new Error('Drag event not initialized'); - } - this.state.event.dx = x - this.state.event.x; - this.state.event.dy = y - this.state.event.y; - this.state.event.x = x; - this.state.event.y = y; - this.state.event.pageX = pageX; - this.state.event.pageY = pageY; - - const source = this.getSource(this.getSourceId()); - if (source) { - source.drag(this); - } - this.performHitTests(); - } - - @action - cancel(): boolean { - if (!this.state.event) { - throw new Error('Drag event not initialized'); - } - if (this.state.cancelled) { - return true; - } - const source = this.getSource(this.getSourceId()); - if (source && source.canCancel(this)) { - this.state.cancelled = true; - this.drag(this.state.event.initialX, this.state.event.initialY, this.state.event.pageX, this.state.event.pageY); - return true; - } - return false; - } - - private performHitTests(): void { - const draggedItemType = this.getItemType(); - const event = this.getDragEvent(); - if (event && draggedItemType) { - const targetIds: string[] = []; - Object.keys(this.targets).forEach(targetId => { - const target = this.getTarget(targetId); - if (target && matchesType(target.type, draggedItemType) && target.hitTest(event.x, event.y)) { - targetIds.push(targetId); - } - }); - - this.hover(targetIds); - } - } - - private getSource(sourceId: string | undefined): DragSource | undefined { - return sourceId ? this.sources[sourceId] : undefined; - } - - private getTarget(targetId: string | undefined): DropTarget | undefined { - return targetId ? this.targets[targetId] : undefined; - } -} - -export const useDndManager = () => { - const controller = useVisualizationController(); - const store = controller.getStore(); - let { dndManager } = store; - if (!dndManager) { - const state = controller.getState(); - let { dragDrop } = state; - if (!dragDrop) { - dragDrop = observable.object({}); - state.dragDrop = dragDrop; - } - dndManager = new DndManagerImpl(dragDrop); - store.dndManager = dndManager; - } - return dndManager; -}; diff --git a/packages/react-topology/src/behavior/useDragNode.tsx b/packages/react-topology/src/behavior/useDragNode.tsx deleted file mode 100644 index 9a5208f9b45..00000000000 --- a/packages/react-topology/src/behavior/useDragNode.tsx +++ /dev/null @@ -1,178 +0,0 @@ -import * as React from 'react'; -import { action } from 'mobx'; -import { observer } from 'mobx-react'; -import ElementContext from '../utils/ElementContext'; -import { Controller, EventListener, isNode, Node } from '../types'; -import { useDndDrag, WithDndDragProps, Modifiers } from './useDndDrag'; -import { - DragSourceSpec, - DragEvent, - ConnectDragSource, - DragObjectWithType, - DragSpecOperationType, - DragOperationWithType, - DragSourceMonitor -} from './dnd-types'; -import { useDndManager } from './useDndManager'; - -export const DRAG_NODE_EVENT = 'drag_node'; -export const DRAG_NODE_START_EVENT = `${DRAG_NODE_EVENT}_start`; -export const DRAG_NODE_END_EVENT = `${DRAG_NODE_EVENT}_end`; - -export type DragNodeEventListener = EventListener<[Node, DragEvent, DragOperationWithType]>; - -export const DRAG_MOVE_OPERATION = 'move.useDragNode'; - -const defaultOperation = { - [Modifiers.DEFAULT]: { type: DRAG_MOVE_OPERATION } -}; - -export const useDragNode = < - DragObject extends DragObjectWithType = DragObjectWithType, - DropResult = any, - CollectedProps extends {} = {}, - Props extends {} = {} ->( - spec?: Omit< - DragSourceSpec, DropResult, CollectedProps, Props>, - 'item' - > & { - item?: DragObject; - }, - props?: Props -): [CollectedProps, ConnectDragSource] => { - const element = React.useContext(ElementContext); - if (!isNode(element)) { - throw new Error('useDragNode must be used within the scope of a Node'); - } - const elementRef = React.useRef(element); - elementRef.current = element; - - const dndManager = useDndManager(); - - return useDndDrag( - React.useMemo(() => { - const sourceSpec: DragSourceSpec = { - item: (spec && spec.item) || { type: '#useDragNode#' }, - operation: (monitor: DragSourceMonitor, p: Props) => { - if (spec) { - const operation = typeof spec.operation === 'function' ? spec.operation(monitor, p) : spec.operation; - if (typeof operation === 'object' && Object.keys(operation).length > 0) { - return { - ...defaultOperation, - ...operation - }; - } - } - return defaultOperation; - }, - begin: (monitor, p) => { - elementRef.current.raise(); - if (elementRef.current.isGroup()) { - elementRef.current.getChildren().forEach(c => { - c.raise(); - }); - } - - const result = spec && spec.begin && spec.begin(monitor, p); - - elementRef.current - .getController() - .fireEvent(DRAG_NODE_START_EVENT, elementRef.current, monitor.getDragEvent(), monitor.getOperation()); - - return result || elementRef.current; - }, - drag: (event, monitor, p) => { - const { dx, dy } = event; - - /** - * @param e - */ - function moveElement(e: Node) { - let moved = true; - if (e.isGroup()) { - const nodeChildren = e.getChildren().filter(isNode); - if (nodeChildren.length) { - moved = false; - nodeChildren.forEach(moveElement); - } - } - if (moved) { - e.setPosition( - e - .getPosition() - .clone() - .translate(dx, dy) - ); - } - } - - moveElement(elementRef.current); - - spec && spec.drag && spec.drag(event, monitor, p); - - elementRef.current - .getController() - .fireEvent(DRAG_NODE_EVENT, elementRef.current, event, monitor.getOperation()); - }, - canDrag: spec ? spec.canDrag : undefined, - end: async (dropResult, monitor, p) => { - // FIXME: Get the controller up front due it issues with model updates during dnd operations - let controller: Controller; - try { - controller = elementRef.current.getController(); - } catch (e) { - return; - } - - if (spec && spec.end) { - try { - await spec.end(dropResult, monitor, p); - } catch { - dndManager.cancel(); - } - } - - action(() => { - controller.fireEvent( - DRAG_NODE_END_EVENT, - elementRef.current, - monitor.getDragEvent(), - monitor.getOperation() - ); - })(); - }, - collect: spec ? spec.collect : undefined, - canCancel: spec ? spec.canCancel : true - }; - return sourceSpec; - }, [spec, dndManager]), - props - ); -}; - -export interface WithDragNodeProps { - dragNodeRef?: WithDndDragProps['dndDragRef']; -} - -export const withDragNode = < - DragObject extends DragObjectWithType = DragObjectWithType, - DropResult = any, - CollectedProps extends {} = {}, - Props extends {} = {} ->( - spec?: Omit< - DragSourceSpec, DropResult, CollectedProps, Props>, - 'item' - > & { - item?: DragObject; - } -) =>

(WrappedComponent: React.ComponentType

) => { - const Component: React.FunctionComponent> = props => { - // TODO fix cast to any - const [dragNodeProps, dragNodeRef] = useDragNode(spec, props as any); - return ; - }; - Component.displayName = `withDragNode(${WrappedComponent.displayName || WrappedComponent.name})`; - return observer(Component); -}; diff --git a/packages/react-topology/src/behavior/usePanZoom.tsx b/packages/react-topology/src/behavior/usePanZoom.tsx deleted file mode 100644 index 710c8b1594f..00000000000 --- a/packages/react-topology/src/behavior/usePanZoom.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import * as React from 'react'; -import * as d3 from 'd3'; -import { observer } from 'mobx-react'; -import { action, autorun, IReactionDisposer } from 'mobx'; -import ElementContext from '../utils/ElementContext'; -import useCallbackRef from '../utils/useCallbackRef'; -import Point from '../geom/Point'; -import { Graph, isGraph, ModelKind } from '../types'; -import { ATTR_DATA_KIND } from '../const'; - -export type PanZoomRef = (node: SVGGElement | null) => void; - -// Used to send events prevented by d3.zoom to the document allowing modals, dropdowns, etc, to close -const propagatePanZoomMouseEvent = (e: Event): void => { - document.dispatchEvent(new MouseEvent(e.type, e)); -}; - -export const usePanZoom = (): PanZoomRef => { - const element = React.useContext(ElementContext); - if (!isGraph(element)) { - throw new Error('usePanZoom must be used within the scope of a Graph'); - } - const elementRef = React.useRef(element); - elementRef.current = element; - - return useCallbackRef((node: SVGGElement | null) => { - let disposeListener: IReactionDisposer | undefined; - if (node) { - // TODO fix any type - const $svg = d3.select(node.ownerSVGElement) as any; - if (node && node.ownerSVGElement) { - node.ownerSVGElement.addEventListener('mousedown', propagatePanZoomMouseEvent); - node.ownerSVGElement.addEventListener('click', propagatePanZoomMouseEvent); - } - const zoom = d3 - .zoom() - .scaleExtent(elementRef.current.getScaleExtent()) - .on( - 'zoom', - action(() => { - elementRef.current.setPosition(new Point(d3.event.transform.x, d3.event.transform.y)); - elementRef.current.setScale(d3.event.transform.k); - }) - ) - .filter(() => { - if (d3.event.ctrlKey || d3.event.button) { - return false; - } - // only allow zoom from double clicking the graph directly - if (d3.event.type === 'dblclick') { - // check if target is not within a node or edge - const svg = node.ownerSVGElement; - let p: Node | null = d3.event.target; - while (p && p !== svg) { - if (p instanceof Element) { - const kind = p.getAttribute(ATTR_DATA_KIND); - if (kind) { - if (kind !== ModelKind.graph) { - return false; - } - break; - } - } - p = p.parentNode; - } - } - return true; - }); - zoom($svg); - - // Update the d3 transform whenever the scale or bounds change. - // This is kinda hacky because when d3 has already made the most recent transform update, - // we listen for the model change, due to the above, only to update the d3 transform again. - disposeListener = autorun(() => { - const scale = elementRef.current.getScale(); - const scaleExtent = elementRef.current.getScaleExtent(); - - // update the min scaling value such that the user can zoom out to the new scale in case - // it is smaller than the default zoom out scale - zoom.scaleExtent([Math.min(scale, scaleExtent[0]), scaleExtent[1]]); - const b = elementRef.current.getBounds(); - - // update d3 zoom data directly - // eslint-disable-next-line no-underscore-dangle - Object.assign($svg.node().__zoom, { - k: scale, - x: b.x, - y: b.y - }); - }); - - // disable double click zoom - // $svg.on('dblclick.zoom', null); - } - return () => { - disposeListener && disposeListener(); - if (node) { - // remove all zoom listeners - d3.select(node.ownerSVGElement).on('.zoom', null); - if (node.ownerSVGElement) { - node.ownerSVGElement.removeEventListener('mousedown', propagatePanZoomMouseEvent); - node.ownerSVGElement.removeEventListener('click', propagatePanZoomMouseEvent); - } - } - }; - }); -}; -export interface WithPanZoomProps { - panZoomRef: PanZoomRef; -} - -export const withPanZoom = () =>

(WrappedComponent: React.ComponentType

) => { - const Component: React.FunctionComponent> = props => { - const panZoomRef = usePanZoom(); - return ; - }; - Component.displayName = `withPanZoom(${WrappedComponent.displayName || WrappedComponent.name})`; - return observer(Component); -}; diff --git a/packages/react-topology/src/behavior/usePolygonAnchor.tsx b/packages/react-topology/src/behavior/usePolygonAnchor.tsx deleted file mode 100644 index 5b11e412179..00000000000 --- a/packages/react-topology/src/behavior/usePolygonAnchor.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import * as React from 'react'; -import { runInAction } from 'mobx'; -import { isNode, AnchorEnd, PointTuple, Node } from '../types'; -import ElementContext from '../utils/ElementContext'; -import PolygonAnchor from '../anchors/PolygonAnchor'; - -export const usePolygonAnchor = (points: PointTuple[], end: AnchorEnd = AnchorEnd.both, type: string = ''): void => { - const element = React.useContext(ElementContext); - if (!isNode(element)) { - throw new Error('usePolygonAnchor must be used within the scope of a Node'); - } - - React.useEffect(() => { - runInAction(() => { - if (points) { - const anchor = new PolygonAnchor(element); - anchor.setPoints(points); - element.setAnchor(anchor, end, type); - } - }); - }, [points, end, type, element]); -}; - -export interface WithPolygonAnchorProps { - setAnchorPoints: (points: PointTuple[]) => void; -} - -export const withPolygonAnchor =

( - getPoints: (element: Node) => PointTuple[], - end?: AnchorEnd, - type?: string -) => (WrappedComponent: React.ComponentType

) => { - const element = React.useContext(ElementContext); - const Component: React.FunctionComponent

= props => { - usePolygonAnchor(getPoints(element as Node), end, type); - return ; - }; - Component.displayName = `withPolygonAnchor(${WrappedComponent.displayName || WrappedComponent.name})`; - return Component; -}; diff --git a/packages/react-topology/src/behavior/useReconnect.tsx b/packages/react-topology/src/behavior/useReconnect.tsx deleted file mode 100644 index 1a6d1f1779e..00000000000 --- a/packages/react-topology/src/behavior/useReconnect.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import { useDndDrag } from './useDndDrag'; -import { - ConnectDragSource, - DragObjectWithType, - DragOperationWithType, - DragSourceSpec, - DragSpecOperationType -} from './dnd-types'; - -export interface WithSourceDragProps { - sourceDragRef: ConnectDragSource; -} - -export const withSourceDrag = < - DragObject extends DragObjectWithType = DragObjectWithType, - DropResult = any, - CollectedProps extends {} = {}, - Props extends {} = {} ->( - spec: DragSourceSpec, DropResult, CollectedProps, Props> -) =>

(WrappedComponent: React.ComponentType

) => { - const Component: React.FunctionComponent> = props => { - // TODO fix cast to any - const [dndDragProps, dndDragRef] = useDndDrag(spec, props as any); - return ; - }; - Component.displayName = `withSourceDrag(${WrappedComponent.displayName || WrappedComponent.name})`; - return observer(Component); -}; - -export interface WithTargetDragProps { - targetDragRef: ConnectDragSource; -} - -export const withTargetDrag = < - DragObject extends DragObjectWithType = DragObjectWithType, - DropResult = any, - CollectedProps extends {} = {}, - Props extends {} = {} ->( - spec: DragSourceSpec, DropResult, CollectedProps, Props> -) =>

(WrappedComponent: React.ComponentType

) => { - const Component: React.FunctionComponent> = props => { - // TODO fix cast to any - const [dndDragProps, dndDragRef] = useDndDrag(spec, props as any); - return ; - }; - Component.displayName = `withTargetDrag(${WrappedComponent.displayName || WrappedComponent.name})`; - return observer(Component); -}; diff --git a/packages/react-topology/src/behavior/useSelection.tsx b/packages/react-topology/src/behavior/useSelection.tsx deleted file mode 100644 index 359583865cb..00000000000 --- a/packages/react-topology/src/behavior/useSelection.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import * as React from 'react'; -import { action, computed } from 'mobx'; -import { observer } from 'mobx-react'; -import { EventListener } from '../types'; -import ElementContext from '../utils/ElementContext'; - -export const SELECTION_EVENT = 'selection'; -export const SELECTION_STATE = 'selectedIds'; - -export type SelectionEventListener = EventListener<[string[]]>; - -interface SelectionHandlerState { - [SELECTION_STATE]?: string[]; -} - -export type OnSelect = (e: React.MouseEvent) => void; - -interface Options { - multiSelect?: boolean; - controlled?: boolean; - raiseOnSelect?: boolean; -} - -export const useSelection = ({ multiSelect, controlled, raiseOnSelect = true }: Options = {}): [boolean, OnSelect] => { - const element = React.useContext(ElementContext); - const elementRef = React.useRef(element); - elementRef.current = element; - - const selected = React.useMemo( - () => - computed(() => { - const { selectedIds } = element.getController().getState(); - return !!selectedIds && selectedIds.includes(element.getId()); - }), - [element] - ); - - const onSelect = React.useCallback( - action((e: React.MouseEvent): void => { - e.stopPropagation(); - const id = elementRef.current.getId(); - const state = elementRef.current.getController().getState(); - const idx = state.selectedIds ? state.selectedIds.indexOf(id) : -1; - let selectedIds: string[]; - let raise = false; - if (multiSelect && (e.ctrlKey || e.metaKey)) { - if (!state.selectedIds) { - raise = true; - selectedIds = [id]; - } else { - selectedIds = [...state.selectedIds]; - if (idx === -1) { - raise = true; - selectedIds.push(id); - } else { - selectedIds.splice(idx, 1); - } - } - } else if (idx === -1 || multiSelect) { - raise = true; - selectedIds = [id]; - } else { - selectedIds = []; - } - if (!controlled) { - state.selectedIds = selectedIds; - } - elementRef.current.getController().fireEvent(SELECTION_EVENT, selectedIds); - if (raiseOnSelect && raise) { - elementRef.current.raise(); - } - }), - [multiSelect, controlled, raiseOnSelect] - ); - return [selected.get(), onSelect]; -}; - -export interface WithSelectionProps { - selected: boolean; - onSelect: OnSelect; -} - -export const withSelection = (options?: Options) =>

( - WrappedComponent: React.ComponentType> -) => { - const Component: React.FunctionComponent> = props => { - const [selected, onSelect] = useSelection(options); - return ; - }; - Component.displayName = `withSelection(${WrappedComponent.displayName || WrappedComponent.name})`; - return observer(Component); -}; diff --git a/packages/react-topology/src/behavior/useSvgAnchor.tsx b/packages/react-topology/src/behavior/useSvgAnchor.tsx deleted file mode 100644 index ef3f01ad0ad..00000000000 --- a/packages/react-topology/src/behavior/useSvgAnchor.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import * as React from 'react'; -import { action } from 'mobx'; -import { isNode, AnchorEnd } from '../types'; -import ElementContext from '../utils/ElementContext'; -import SVGAnchor from '../anchors/SVGAnchor'; - -export type SvgAnchorRef = (node: SVGElement | null) => void; - -export const useSvgAnchor = ( - end: AnchorEnd = AnchorEnd.both, - type: string = '' -): ((node: SVGElement | null) => void) => { - const element = React.useContext(ElementContext); - if (!isNode(element)) { - throw new Error('useSvgAnchor must be used within the scope of a Node'); - } - - const setAnchorSvgRef = React.useCallback( - action((node: SVGElement | null) => { - if (node) { - const anchor = new SVGAnchor(element); - anchor.setSVGElement(node); - element.setAnchor(anchor, end, type); - } - }), - [element, type, end] - ); - - return setAnchorSvgRef; -}; - -export interface WithSvgAnchorProps { - svgAnchorRef: SvgAnchorRef; -} - -export const withSvgAnchor = (end?: AnchorEnd, type?: string) =>

() => ( - WrappedComponent: React.ComponentType

-) => { - const Component: React.FunctionComponent> = props => { - const svgAnchorRef = useSvgAnchor(end, type); - return ; - }; - Component.displayName = `withSvgAnchor(${WrappedComponent.displayName || WrappedComponent.name})`; - return Component; -}; diff --git a/packages/react-topology/src/behavior/withContextMenu.tsx b/packages/react-topology/src/behavior/withContextMenu.tsx deleted file mode 100644 index 7bc552d446d..00000000000 --- a/packages/react-topology/src/behavior/withContextMenu.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import { GraphElement as TopologyElement } from '../types'; -import ElementContext from '../utils/ElementContext'; -import ContextMenu from '../components/contextmenu/ContextMenu'; - -type Reference = React.ComponentProps['reference']; - -export interface WithContextMenuProps { - onContextMenu: (e: React.MouseEvent) => void; - contextMenuOpen: boolean; -} - -export const withContextMenu = ( - actions: (element: E) => React.ReactElement[], - container?: Element | null | undefined | (() => Element), - className?: string, - atPoint: boolean = true -) =>

(WrappedComponent: React.ComponentType>) => { - const Component: React.FunctionComponent> = props => { - const element = React.useContext(ElementContext); - const [reference, setReference] = React.useState(null); - const onContextMenu = React.useCallback((e: React.MouseEvent) => { - e.preventDefault(); - e.stopPropagation(); - setReference( - atPoint - ? { - x: e.pageX, - y: e.pageY - } - : e.currentTarget - ); - }, []); - - return ( - <> - - {reference ? ( - setReference(null)} - > - {actions(element as E)} - - ) : null} - - ); - }; - Component.displayName = `withContextMenu(${WrappedComponent.displayName || WrappedComponent.name})`; - return observer(Component); -}; diff --git a/packages/react-topology/src/behavior/withCreateConnector.tsx b/packages/react-topology/src/behavior/withCreateConnector.tsx deleted file mode 100644 index f4f33ea0c5c..00000000000 --- a/packages/react-topology/src/behavior/withCreateConnector.tsx +++ /dev/null @@ -1,278 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { hullPath } from '../utils/svg-utils'; -import DefaultCreateConnector from '../components/DefaultCreateConnector'; -import Point from '../geom/Point'; -import Layer from '../components/layers/Layer'; -import { ContextMenu, ContextMenuItem } from '../components/contextmenu'; -import { AnchorEnd, Graph, GraphElement, isGraph, isNode, LabelPosition, Node } from '../types'; -import { - DragEvent, - DragObjectWithType, - DragOperationWithType, - DragSourceMonitor, - DragSourceSpec, - DragSpecOperationType -} from './dnd-types'; -import { useDndDrag } from './useDndDrag'; -import { TOP_LAYER } from '../const'; -import { useCombineRefs, useHover } from '../utils'; - -export const CREATE_CONNECTOR_OPERATION = '#createconnector#'; -export const CREATE_CONNECTOR_DROP_TYPE = '#createConnector#'; - -export interface ConnectorChoice { - label: string; -} - -export interface CreateConnectorOptions { - handleAngle?: number; - handleAngleTop?: number; - handleLength?: number; - dragItem?: DragObjectWithType; - dragOperation?: DragOperationWithType; - hideConnectorMenu?: boolean; -} - -interface ConnectorComponentProps { - startPoint: Point; - endPoint: Point; - hints: string[]; - dragging: boolean; - hover?: boolean; -} - -type CreateConnectorRenderer = React.ComponentType; - -type OnCreateResult = ConnectorChoice[] | void | undefined | null | React.ReactElement[]; - -type CreateConnectorWidgetProps = { - element: Node; - onKeepAlive: (isAlive: boolean) => void; - onCreate: ( - element: Node, - target: Node | Graph, - event: DragEvent, - dropHints?: string[] | undefined, - choice?: ConnectorChoice - ) => Promise | OnCreateResult; - ConnectorComponent: CreateConnectorRenderer; - contextMenuClass?: string; -} & CreateConnectorOptions; - -interface CollectProps { - event?: DragEvent; - dragging: boolean; - hints?: string[] | undefined; -} - -interface PromptData { - element: Node; - target: Node | Graph; - event: DragEvent; - choices: ConnectorChoice[] | React.ReactElement[]; -} - -const isReactElementArray = (choices: ConnectorChoice[] | React.ReactElement[]): choices is React.ReactElement[] => - React.isValidElement(choices[0]); - -const DEFAULT_HANDLE_ANGLE = Math.PI / 180; -const DEFAULT_HANDLE_ANGLE_TOP = 1.5 * Math.PI; -const DEFAULT_HANDLE_LENGTH = 32; - -const CreateConnectorWidget: React.FunctionComponent = observer(props => { - const { - element, - onKeepAlive, - onCreate, - ConnectorComponent, - handleAngle = DEFAULT_HANDLE_ANGLE, - handleAngleTop = DEFAULT_HANDLE_ANGLE_TOP, - handleLength = DEFAULT_HANDLE_LENGTH, - contextMenuClass, - dragItem, - dragOperation, - hideConnectorMenu - } = props; - const [prompt, setPrompt] = React.useState(null); - const [active, setActive] = React.useState(false); - const hintsRef = React.useRef(); - - const spec = React.useMemo(() => { - const dragSourceSpec: DragSourceSpec< - DragObjectWithType, - DragSpecOperationType, - GraphElement, - CollectProps, - CreateConnectorWidgetProps - > = { - item: dragItem || { type: CREATE_CONNECTOR_DROP_TYPE }, - operation: dragOperation || { type: CREATE_CONNECTOR_OPERATION }, - begin: (monitor: DragSourceMonitor, dragProps: any) => { - setActive(true); - return dragProps.element; - }, - drag: (event: DragEvent, monitor: DragSourceMonitor, p: CreateConnectorWidgetProps) => { - p.element.raise(); - }, - end: async (dropResult: GraphElement, monitor: DragSourceMonitor, dragProps: CreateConnectorWidgetProps) => { - const event = monitor.getDragEvent(); - if ((isNode(dropResult) || isGraph(dropResult)) && event) { - const choices = await dragProps.onCreate(dragProps.element, dropResult, event, monitor.getDropHints()); - if (choices && choices.length && !hideConnectorMenu) { - setPrompt({ element: dragProps.element, target: dropResult, event, choices }); - return; - } - } - setActive(false); - dragProps.onKeepAlive(false); - }, - collect: monitor => ({ - dragging: !!monitor.getItem(), - event: monitor.isDragging() ? monitor.getDragEvent() : undefined, - hints: monitor.getDropHints() - }) - }; - return dragSourceSpec; - }, [setActive, dragItem, dragOperation, hideConnectorMenu]); - const [{ dragging, event, hints }, dragRef] = useDndDrag(spec, props); - const [hover, hoverRef] = useHover(); - const refs = useCombineRefs(dragRef, hoverRef); - - if (!active && dragging && !event) { - // another connector is dragging right now - return null; - } - - if (dragging) { - // store the latest hints - hintsRef.current = hints; - } - - const dragEvent = prompt ? prompt.event : event; - - let startPoint: Point; - let endPoint: Point; - - if (dragEvent) { - endPoint = new Point(dragEvent.x, dragEvent.y); - startPoint = element.getAnchor(AnchorEnd.source).getLocation(endPoint); - } else { - const bounds = element.getBounds(); - const isRightLabel = element.getLabelPosition() === LabelPosition.right; - const referencePoint = isRightLabel - ? new Point(bounds.x + bounds.width / 2, bounds.y) - : new Point(bounds.right(), Math.tan(handleAngle) * (bounds.width / 2) + bounds.y + bounds.height / 2); - startPoint = element.getAnchor(AnchorEnd.source).getLocation(referencePoint); - endPoint = new Point( - Math.cos(isRightLabel ? handleAngleTop : handleAngle) * handleLength + startPoint.x, - Math.sin(isRightLabel ? handleAngleTop : handleAngle) * handleLength + startPoint.y - ); - } - - // bring into the coordinate space of the element - element.translateFromParent(startPoint); - element.translateFromParent(endPoint); - - return ( - <> - - onKeepAlive(true) : undefined} - onMouseLeave={!active ? () => onKeepAlive(false) : undefined} - > - - - - - {prompt && ( - { - setActive(false); - onKeepAlive(false); - }} - > - {isReactElementArray(prompt.choices) - ? prompt.choices - : prompt.choices.map((c: ConnectorChoice) => ( - { - onCreate(prompt.element, prompt.target, prompt.event, hintsRef.current, c); - }} - > - {c.label} - - ))} - - )} - - ); -}); - -interface ElementProps { - element: Node; -} - -export interface WithCreateConnectorProps { - onShowCreateConnector: () => void; - onHideCreateConnector: () => void; -} - -export const withCreateConnector =

( - onCreate: React.ComponentProps['onCreate'], - ConnectorComponent: CreateConnectorRenderer = DefaultCreateConnector, - contextMenuClass?: string, - options?: CreateConnectorOptions -) => (WrappedComponent: React.ComponentType>) => { - const Component: React.FunctionComponent> = props => { - const [show, setShow] = React.useState(false); - const [alive, setKeepAlive] = React.useState(false); - const onShowCreateConnector = React.useCallback(() => setShow(true), []); - const onHideCreateConnector = React.useCallback(() => setShow(false), []); - const onKeepAlive = React.useCallback((isAlive: boolean) => setKeepAlive(isAlive), [setKeepAlive]); - return ( - <> - - {(show || alive) && ( - - )} - - ); - }; - Component.displayName = `withCreateConnector(${WrappedComponent.displayName || WrappedComponent.name})`; - return observer(Component); -}; diff --git a/packages/react-topology/src/behavior/withRemoveConnector.tsx b/packages/react-topology/src/behavior/withRemoveConnector.tsx deleted file mode 100644 index cf8975b5bc2..00000000000 --- a/packages/react-topology/src/behavior/withRemoveConnector.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import { Edge } from '../types'; -import DefaultRemoveConnector from '../components/DefaultRemoveConnector'; - -interface ElementProps { - element: Edge; -} - -export interface WithRemoveConnectorProps { - onShowRemoveConnector?: () => void; - onHideRemoveConnector?: () => void; -} - -type RemoveRenderer = (edge: Edge, onRemove: (e: Edge) => void, size?: number) => React.ReactElement; - -const defaultRenderRemove: RemoveRenderer = (edge: Edge, onRemove: (e: Edge) => void) => { - const removeEdge = () => { - onRemove(edge); - }; - - return ( - - ); -}; - -export const withRemoveConnector =

( - onRemove: (edge: Edge) => void, - renderRemove: RemoveRenderer = defaultRenderRemove -) => (WrappedComponent: React.ComponentType

) => { - const Component: React.FunctionComponent> = props => { - const [show, setShow] = React.useState(false); - const onShowRemoveConnector = React.useCallback(() => setShow(true), []); - const onHideRemoveConnector = React.useCallback(() => setShow(false), []); - - return ( - - {show && renderRemove(props.element, onRemove)} - - ); - }; - Component.displayName = `withRemoveConnector(${WrappedComponent.displayName || WrappedComponent.name})`; - return observer(Component); -}; diff --git a/packages/react-topology/src/components/ComputeElementDimensions.tsx b/packages/react-topology/src/components/ComputeElementDimensions.tsx deleted file mode 100644 index a1d179853a2..00000000000 --- a/packages/react-topology/src/components/ComputeElementDimensions.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import * as React from 'react'; -import { action } from 'mobx'; -import { observer } from 'mobx-react'; -import Dimensions from '../geom/Dimensions'; -import { Node } from '../types'; - -interface ComputeElementDimensionsProps { - children?: React.ReactNode; - element: Node; -} - -const ComputeElementDimensions: React.FunctionComponent = ({ element, children }) => { - const gRef = React.useRef(null); - React.useEffect(() => { - if (gRef.current && !element.isDimensionsInitialized()) { - const { width, height } = gRef.current.getBBox(); - action(() => element.setDimensions(new Dimensions(width, height)))(); - } - }, [element]); - - // render an invisible node - return ( - - {children} - - ); -}; - -// export for testing -export const InternalComputeElementDimensions = ComputeElementDimensions; - -export default observer(ComputeElementDimensions); diff --git a/packages/react-topology/src/components/DefaultCreateConnector.tsx b/packages/react-topology/src/components/DefaultCreateConnector.tsx deleted file mode 100644 index fc416e86eb0..00000000000 --- a/packages/react-topology/src/components/DefaultCreateConnector.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import * as React from 'react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import AddCircleOIcon from '@patternfly/react-icons/dist/esm/icons/add-circle-o-icon'; -import { Tooltip } from '@patternfly/react-core'; -import Point from '../geom/Point'; -import ConnectorArrow from './edges/terminals/ConnectorArrow'; - -const cursorSize = 20; - -interface DefaultCreateConnectorProps { - startPoint: Point; - endPoint: Point; - hints: string[]; - dragging: boolean; - hover?: boolean; - className?: string; - tipContents?: React.ReactNode; -} - -const DefaultCreateConnector: React.FunctionComponent = ({ - startPoint, - endPoint, - hints, - dragging, - hover, - tipContents, - className -}) => { - const classes = css( - styles.topologyDefaultCreateConnector, - className, - hover && styles.modifiers.hover, - dragging && styles.modifiers.dragging - ); - - return ( - - - {hints && hints[hints.length - 1] === 'create' ? ( - - - {tipContents ? ( - - - - ) : ( - - )} - - ) : ( - - )} - - ); -}; - -export default DefaultCreateConnector; diff --git a/packages/react-topology/src/components/DefaultRemoveConnector.tsx b/packages/react-topology/src/components/DefaultRemoveConnector.tsx deleted file mode 100644 index 53e0af292ad..00000000000 --- a/packages/react-topology/src/components/DefaultRemoveConnector.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import * as React from 'react'; -import { Tooltip, TooltipPosition } from '@patternfly/react-core'; -import TrashIcon from '@patternfly/react-icons/dist/esm/icons/trash-icon'; -import Point from '../geom/Point'; - -interface DefaultRemoveConnectorProps { - startPoint: Point; - endPoint: Point; - onRemove(): void; - size?: number; -} - -/** - * @param startPoint - * @param endPoint - */ -function computeTooltipPosition(startPoint: Point, endPoint: Point): TooltipPosition { - const angle = Math.abs((Math.atan2(endPoint.y - startPoint.y, endPoint.x - startPoint.x) * 180) / Math.PI); - if (angle < 135 && angle > 90) { - return TooltipPosition.left; - } - if (angle > 45 && angle <= 90) { - return TooltipPosition.right; - } - return TooltipPosition.top; -} - -const DefaultRemoveConnector: React.FunctionComponent = ({ - startPoint, - endPoint, - onRemove, - size = 14 -}) => ( - - { - e.stopPropagation(); - onRemove(); - }} - > - - - - - - -); - -export default DefaultRemoveConnector; diff --git a/packages/react-topology/src/components/ElementWrapper.tsx b/packages/react-topology/src/components/ElementWrapper.tsx deleted file mode 100644 index 4db5168e3ee..00000000000 --- a/packages/react-topology/src/components/ElementWrapper.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import { computed } from 'mobx'; -import ElementContext from '../utils/ElementContext'; -import { GraphElement, isGraph, isEdge, isNode, Node } from '../types'; -import { ATTR_DATA_ID, ATTR_DATA_KIND, ATTR_DATA_TYPE } from '../const'; -import ComputeElementDimensions from './ComputeElementDimensions'; -import { useDndManager } from '../behavior/useDndManager'; - -interface ElementWrapperProps { - element: GraphElement; -} - -const NodeElementComponent: React.FunctionComponent<{ element: Node }> = observer(({ element }) => { - const dndManager = useDndManager(); - const isDragging = dndManager.isDragging(); - const dragItem = dndManager.getItem(); - const controller = element.getController(); - const isVisible = React.useMemo(() => computed(() => controller.shouldRenderNode(element)), [element, controller]); - if (isVisible.get() || (isDragging && dragItem === element)) { - return ; - } - return null; -}); - -// in a separate component so that changes to behaviors do not re-render children -const ElementComponent: React.FunctionComponent = observer(({ element }) => { - const kind = element.getKind(); - const type = element.getType(); - const controller = element.getController(); - - const Component = React.useMemo(() => controller.getComponent(kind, type), [controller, kind, type]); - - return ( - - - - ); -}); - -const ElementChildren: React.FunctionComponent = observer(({ element }) => ( - <> - {element - .getChildren() - .filter(isEdge) - .map(e => ( - - ))} - {element - .getChildren() - .filter(isNode) - .map(e => ( - - ))} - -)); - -const ElementWrapper: React.FunctionComponent = observer(({ element }) => { - if (!element.isVisible()) { - if (!isNode(element) || element.isDimensionsInitialized()) { - return null; - } - } - - if (isEdge(element)) { - const source = element.getSourceAnchorNode(); - const target = element.getTargetAnchorNode(); - if ((source && !source.isVisible()) || (target && !target.isVisible())) { - return null; - } - } - - const commonAttrs = { - [ATTR_DATA_ID]: element.getId(), - [ATTR_DATA_KIND]: element.getKind(), - [ATTR_DATA_TYPE]: element.getType() - }; - - if (isGraph(element)) { - return ( - - - - ); - } - - if (isNode(element)) { - if (!element.isDimensionsInitialized()) { - return ( - - - - - ); - } - if (!element.isGroup() || element.isCollapsed()) { - const { x, y } = element.getPosition(); - return ( - - - - - ); - } - return ( - - - - - ); - } - return ( - - - - - ); -}); - -export default ElementWrapper; diff --git a/packages/react-topology/src/components/GraphComponent.tsx b/packages/react-topology/src/components/GraphComponent.tsx deleted file mode 100644 index e19175946e7..00000000000 --- a/packages/react-topology/src/components/GraphComponent.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import { Graph } from '../types'; -import { WithPanZoomProps } from '../behavior/usePanZoom'; -import { WithDndDropProps } from '../behavior/useDndDrop'; -import { WithSelectionProps } from '../behavior/useSelection'; -import { WithContextMenuProps } from '../behavior/withContextMenu'; -import LayersProvider from './layers/LayersProvider'; -import ElementWrapper from './ElementWrapper'; - -interface ElementProps { - element: Graph; -} - -type GraphComponentProps = ElementProps & - WithPanZoomProps & - WithDndDropProps & - WithSelectionProps & - WithContextMenuProps; - -// This inner Component will prevent the re-rendering of all children when the transform changes -const ElementChildren: React.FunctionComponent = observer(({ element }) => ( - <> - {element.getEdges().map(e => ( - - ))} - {element.getNodes().map(e => ( - - ))} - -)); - -// This inner Component will prevent re-rendering layers when the transform changes -const Inner: React.FunctionComponent = React.memo( - observer(({ element }) => ( - - - - )) -); - -const GraphComponent: React.FunctionComponent = ({ - element, - panZoomRef, - dndDropRef, - onSelect, - onContextMenu -}) => { - const { x, y, width, height } = element.getBounds(); - return ( - <> - - - - - - ); -}; - -export default observer(GraphComponent); diff --git a/packages/react-topology/src/components/SVGArrowMarker.tsx b/packages/react-topology/src/components/SVGArrowMarker.tsx deleted file mode 100644 index dbd82d94cce..00000000000 --- a/packages/react-topology/src/components/SVGArrowMarker.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import * as React from 'react'; -import SVGDefs from './defs/SVGDefs'; - -declare const global: any; - -// workaround to pass docs building -if (!global.SVGElement) { - global.SVGElement = global.Element; -} - -interface SVGArrowMarkerProps { - id: string; - nodeSize: number; - markerSize: number; - className?: string; -} - -const SVGArrowMarker: React.FunctionComponent = ({ id, nodeSize, markerSize, className }) => ( - - - - - -); - -export default SVGArrowMarker; diff --git a/packages/react-topology/src/components/TopologyControlBar/TopologyControlBar.tsx b/packages/react-topology/src/components/TopologyControlBar/TopologyControlBar.tsx deleted file mode 100644 index 66acaa6738a..00000000000 --- a/packages/react-topology/src/components/TopologyControlBar/TopologyControlBar.tsx +++ /dev/null @@ -1,304 +0,0 @@ -import * as React from 'react'; -import { - Button, - Toolbar, - ToolbarContent, - ToolbarGroup, - ToolbarItem, - GenerateId, - Tooltip -} from '@patternfly/react-core'; -import ExpandIcon from '@patternfly/react-icons/dist/esm/icons/expand-icon'; -import ExpandArrowsAltIcon from '@patternfly/react-icons/dist/esm/icons/expand-arrows-alt-icon'; -import SearchPlusIcon from '@patternfly/react-icons/dist/esm/icons/search-plus-icon'; -import SearchMinusIcon from '@patternfly/react-icons/dist/esm/icons/search-minus-icon'; -import '@patternfly/react-styles/css/components/Topology/topology-controlbar.css'; - -/* ID's for common control buttons */ -export const ZOOM_IN = 'zoom-in'; -export const ZOOM_OUT = 'zoom-out'; -export const FIT_TO_SCREEN = 'fit-to-screen'; -export const RESET_VIEW = 'reset-view'; -export const LEGEND = 'legend'; - -/* Data needed for each control button */ -export interface TopologyControlButton { - id: any; - icon: React.ReactNode; - tooltip?: React.ReactNode; - ariaLabel?: string; - callback?: (id: any) => void; - disabled?: boolean; - hidden?: boolean; -} - -/* Options for creating the control buttons */ -export interface TopologyControlButtonsOptions { - zoomIn: boolean; - zoomInIcon: React.ReactNode; - zoomInTip: React.ReactNode; - zoomInAriaLabel: string; - zoomInCallback: (id: any) => void; - zoomInDisabled: boolean; - zoomInHidden: boolean; - - zoomOut: boolean; - zoomOutIcon: React.ReactNode; - zoomOutTip: React.ReactNode; - zoomOutAriaLabel: string; - zoomOutCallback: (id: any) => void; - zoomOutDisabled: boolean; - zoomOutHidden: boolean; - - fitToScreen: boolean; - fitToScreenIcon: React.ReactNode; - fitToScreenTip: React.ReactNode; - fitToScreenAriaLabel: string; - fitToScreenCallback: (id: any) => void; - fitToScreenDisabled: boolean; - fitToScreenHidden: boolean; - - resetView: boolean; - resetViewIcon: React.ReactNode; - resetViewTip: React.ReactNode; - resetViewAriaLabel: string; - resetViewCallback: (id: any) => void; - resetViewDisabled: boolean; - resetViewHidden: boolean; - - legend: boolean; - legendIcon: React.ReactNode; - legendTip: string; - legendAriaLabel: string; - legendCallback: (id: any) => void; - legendDisabled: boolean; - legendHidden: boolean; - - customButtons: TopologyControlButton[]; -} - -/* Default options for creating control buttons */ -export const defaultControlButtonsOptions: TopologyControlButtonsOptions = { - zoomIn: true, - zoomInIcon: , - zoomInTip: 'Zoom In', - zoomInAriaLabel: 'Zoom In', - zoomInCallback: null, - zoomInDisabled: false, - zoomInHidden: false, - - zoomOut: true, - zoomOutIcon: , - zoomOutTip: 'Zoom Out', - zoomOutAriaLabel: 'Zoom Out', - zoomOutCallback: null, - zoomOutDisabled: false, - zoomOutHidden: false, - - fitToScreen: true, - fitToScreenIcon: , - fitToScreenTip: 'Fit to Screen', - fitToScreenAriaLabel: 'Fit to Screen', - fitToScreenCallback: null, - fitToScreenDisabled: false, - fitToScreenHidden: false, - - resetView: true, - resetViewIcon: , - resetViewTip: 'Reset View', - resetViewAriaLabel: 'Reset View', - resetViewCallback: null, - resetViewDisabled: false, - resetViewHidden: false, - - legend: true, - legendIcon: 'Legend', - legendTip: '', - legendAriaLabel: null, - legendCallback: null, - legendDisabled: false, - legendHidden: false, - - customButtons: [] -}; - -/* Utility function to create the common control buttons, can pass null for all defaults, or specify overrides */ -export const createTopologyControlButtons = ({ - zoomIn = defaultControlButtonsOptions.zoomIn, - zoomInIcon = defaultControlButtonsOptions.zoomInIcon, - zoomInTip = defaultControlButtonsOptions.zoomInTip, - zoomInAriaLabel = defaultControlButtonsOptions.zoomInAriaLabel, - zoomInCallback = defaultControlButtonsOptions.zoomInCallback, - zoomInDisabled = defaultControlButtonsOptions.zoomInDisabled, - zoomInHidden = defaultControlButtonsOptions.zoomInHidden, - - zoomOut = defaultControlButtonsOptions.zoomOut, - zoomOutIcon = defaultControlButtonsOptions.zoomOutIcon, - zoomOutTip = defaultControlButtonsOptions.zoomOutTip, - zoomOutAriaLabel = defaultControlButtonsOptions.zoomOutAriaLabel, - zoomOutCallback = defaultControlButtonsOptions.zoomOutCallback, - zoomOutDisabled = defaultControlButtonsOptions.zoomOutDisabled, - zoomOutHidden = defaultControlButtonsOptions.zoomOutHidden, - - fitToScreen = defaultControlButtonsOptions.fitToScreen, - fitToScreenIcon = defaultControlButtonsOptions.fitToScreenIcon, - fitToScreenTip = defaultControlButtonsOptions.fitToScreenTip, - fitToScreenAriaLabel = defaultControlButtonsOptions.fitToScreenAriaLabel, - fitToScreenCallback = defaultControlButtonsOptions.fitToScreenCallback, - fitToScreenDisabled = defaultControlButtonsOptions.fitToScreenDisabled, - fitToScreenHidden = defaultControlButtonsOptions.fitToScreenHidden, - - resetView = defaultControlButtonsOptions.resetView, - resetViewIcon = defaultControlButtonsOptions.resetViewIcon, - resetViewTip = defaultControlButtonsOptions.resetViewTip, - resetViewAriaLabel = defaultControlButtonsOptions.resetViewAriaLabel, - resetViewCallback = defaultControlButtonsOptions.resetViewCallback, - resetViewDisabled = defaultControlButtonsOptions.resetViewDisabled, - resetViewHidden = defaultControlButtonsOptions.resetViewHidden, - - legend = defaultControlButtonsOptions.legend, - legendIcon = defaultControlButtonsOptions.legendIcon, - legendTip = defaultControlButtonsOptions.legendTip, - legendAriaLabel = defaultControlButtonsOptions.legendAriaLabel, - legendCallback = defaultControlButtonsOptions.legendCallback, - legendDisabled = defaultControlButtonsOptions.legendDisabled, - legendHidden = defaultControlButtonsOptions.legendHidden, - - customButtons = defaultControlButtonsOptions.customButtons -}: TopologyControlButtonsOptions = defaultControlButtonsOptions): TopologyControlButton[] => { - const controlButtons: TopologyControlButton[] = []; - - if (zoomIn) { - controlButtons.push({ - id: ZOOM_IN, - icon: zoomInIcon, - tooltip: zoomInTip, - ariaLabel: zoomInAriaLabel, - callback: zoomInCallback, - disabled: zoomInDisabled, - hidden: zoomInHidden - }); - } - - if (zoomOut) { - controlButtons.push({ - id: ZOOM_OUT, - icon: zoomOutIcon, - tooltip: zoomOutTip, - ariaLabel: zoomOutAriaLabel, - callback: zoomOutCallback, - disabled: zoomOutDisabled, - hidden: zoomOutHidden - }); - } - - if (fitToScreen) { - controlButtons.push({ - id: FIT_TO_SCREEN, - icon: fitToScreenIcon, - tooltip: fitToScreenTip, - ariaLabel: fitToScreenAriaLabel, - callback: fitToScreenCallback, - disabled: fitToScreenDisabled, - hidden: fitToScreenHidden - }); - } - - if (resetView) { - controlButtons.push({ - id: RESET_VIEW, - icon: resetViewIcon, - tooltip: resetViewTip, - ariaLabel: resetViewAriaLabel, - callback: resetViewCallback, - disabled: resetViewDisabled, - hidden: resetViewHidden - }); - } - - if (customButtons) { - controlButtons.push(...customButtons); - } - - if (legend) { - controlButtons.push({ - id: LEGEND, - icon: legendIcon, - tooltip: legendTip, - ariaLabel: legendAriaLabel, - callback: legendCallback, - disabled: legendDisabled, - hidden: legendHidden - }); - } - - return controlButtons; -}; - -export interface TopologyControlBarProps extends React.HTMLProps { - /** Additional classes added to the control bar */ - className?: string; - /** Any extra child nodes (placed after the buttons) */ - children?: React.ReactNode; - /** Buttons to be added to the bar */ - controlButtons?: TopologyControlButton[]; - /** Callback when any button is clicked, id of the clicked button is passed */ - onButtonClick?: (id: any) => void; -} - -export const TopologyControlBar: React.FunctionComponent = ({ - className = null, - children = null, - controlButtons = [], - onButtonClick = () => undefined -}: TopologyControlBarProps) => { - const handleButtonClick = (event: React.MouseEvent, button: TopologyControlButton) => { - event.preventDefault(); - onButtonClick(button.id); - if (button.callback) { - button.callback(button.id); - } - }; - - const renderButton = (button: TopologyControlButton): React.ReactNode => { - const renderedButton = ( - - ); - - if (button.tooltip) { - return {renderedButton}; - } - - return renderedButton; - }; - - return ( - - {randomId => ( - - - - {controlButtons.map((button: TopologyControlButton) => - button.hidden ? null : {renderButton(button)} - )} - {children} - - - - )} - - ); -}; -TopologyControlBar.displayName = 'TopologyControlBar'; diff --git a/packages/react-topology/src/components/TopologyControlBar/__tests__/TopologyControlBar.test.tsx b/packages/react-topology/src/components/TopologyControlBar/__tests__/TopologyControlBar.test.tsx deleted file mode 100644 index afb8bf22e8b..00000000000 --- a/packages/react-topology/src/components/TopologyControlBar/__tests__/TopologyControlBar.test.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import * as React from 'react'; - -import { render, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; - -import { TopologyControlBar, createTopologyControlButtons, defaultControlButtonsOptions } from '../TopologyControlBar'; - -describe('TopologyControlBar', () => { - test('should display the default controls correctly', async () => { - const controlButtons = createTopologyControlButtons(); - const onButtonClick = jest.fn(); - const user = userEvent.setup(); - - const { asFragment } = render( - - ); - - await user.click(screen.getByText('Zoom In')); - expect(onButtonClick).toHaveBeenCalledTimes(1); - expect(asFragment()).toMatchSnapshot(); - }); - - test('should accept button options correctly', async () => { - const zoomInCallback = jest.fn(); - const controlButtons = createTopologyControlButtons({ - ...defaultControlButtonsOptions, - zoomInCallback, - zoomInAriaLabel: 'test-zoom-in-aria-label', - zoomInIcon: test zoom in, - zoomInTip: 'test zoom in tooltip', - fitToScreenHidden: true, - resetViewDisabled: true, - legend: false - }); - const user = userEvent.setup(); - - const { asFragment } = render( - - ); - - await user.click(screen.getByText('test zoom in')); - expect(zoomInCallback).toHaveBeenCalledTimes(1); - expect(asFragment()).toMatchSnapshot(); - }); -}); diff --git a/packages/react-topology/src/components/TopologyControlBar/__tests__/__snapshots__/TopologyControlBar.test.tsx.snap b/packages/react-topology/src/components/TopologyControlBar/__tests__/__snapshots__/TopologyControlBar.test.tsx.snap deleted file mode 100644 index e7904ed6547..00000000000 --- a/packages/react-topology/src/components/TopologyControlBar/__tests__/__snapshots__/TopologyControlBar.test.tsx.snap +++ /dev/null @@ -1,342 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`TopologyControlBar should accept button options correctly 1`] = ` - -

-
-
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-
-
- - -`; - -exports[`TopologyControlBar should display the default controls correctly 1`] = ` - -
-
-
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
- -
-
-
-
-
-
-
- - -`; diff --git a/packages/react-topology/src/components/TopologyControlBar/index.ts b/packages/react-topology/src/components/TopologyControlBar/index.ts deleted file mode 100644 index 817d213a556..00000000000 --- a/packages/react-topology/src/components/TopologyControlBar/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './TopologyControlBar'; diff --git a/packages/react-topology/src/components/TopologySideBar/TopologySideBar.tsx b/packages/react-topology/src/components/TopologySideBar/TopologySideBar.tsx deleted file mode 100644 index 88dc27caa66..00000000000 --- a/packages/react-topology/src/components/TopologySideBar/TopologySideBar.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import * as React from 'react'; - -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-side-bar'; -import TimesIcon from '@patternfly/react-icons/dist/esm/icons/times-icon'; -import { Button } from '@patternfly/react-core'; - -export interface TopologySideBarProps { - /** Additional classes added to the sidebar */ - className?: string; - /** Contents for the sidebar */ - children?: React.ReactNode; - /** Flag if sidebar is being used in a resizable drawer (default false) */ - resizable?: boolean; - /** Not used for resizeable side bars */ - show?: boolean; - /** A callback for closing the sidebar, if provided the close button will be displayed in the sidebar */ - onClose?: () => void; - /** Component to place in the header of the sidebar */ - header?: React.ReactNode; -} - -export const TopologySideBar: React.FunctionComponent = ({ - className = '', - resizable = false, - show, - onClose = null, - header, - children = null, - ...otherProps -}) => { - const [isIn, setIsIn] = React.useState(false); - - React.useEffect(() => { - let timer: any = null; - - if (isIn !== show) { - clearTimeout(timer); - timer = setTimeout(() => setIsIn(show), 150); - } - return () => { - clearTimeout(timer); - }; - }, [show, isIn]); - - const classNames = resizable - ? css(styles.topologyResizableSideBar, className) - : css(styles.topologySideBar, 'fade', className, show && styles.shown, isIn && styles.in); - return ( -
- {(resizable || show) && ( - - {onClose && ( - - )} - {header &&
{header}
} - {children} -
- )} -
- ); -}; - -TopologySideBar.displayName = 'TopologySideBar'; diff --git a/packages/react-topology/src/components/TopologySideBar/__tests__/TopologySideBar.test.tsx b/packages/react-topology/src/components/TopologySideBar/__tests__/TopologySideBar.test.tsx deleted file mode 100644 index 9c7f509ec54..00000000000 --- a/packages/react-topology/src/components/TopologySideBar/__tests__/TopologySideBar.test.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import * as React from 'react'; - -import { render, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; - -import { TopologySideBar } from '../index'; - -describe('TopologySideBar', () => { - test('should display topology sidebar correctly', () => { - render( - Header}> -
- - ); - expect(screen.getByText('Header')).toBeInTheDocument(); - }); - - test('should display topology sidebar w/ close correctly', async () => { - const mockClose = jest.fn(); - const user = userEvent.setup(); - - render( - -
- - ); - - await user.click(screen.getByRole('button', { name: 'Close' })); - expect(mockClose).toHaveBeenCalled(); - }); - - test('should hide the sidebar correctly', () => { - render( - Header}> -
test canvas content
-
- ); - expect(screen.queryByText('test canvas content')).toBeNull(); - }); -}); diff --git a/packages/react-topology/src/components/TopologySideBar/index.ts b/packages/react-topology/src/components/TopologySideBar/index.ts deleted file mode 100644 index f09bb812a3a..00000000000 --- a/packages/react-topology/src/components/TopologySideBar/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './TopologySideBar'; diff --git a/packages/react-topology/src/components/TopologyView/TopologyView.tsx b/packages/react-topology/src/components/TopologyView/TopologyView.tsx deleted file mode 100644 index 62bbeb2ac8f..00000000000 --- a/packages/react-topology/src/components/TopologyView/TopologyView.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import * as React from 'react'; -import { - Drawer, - DrawerContent, - DrawerContentBody, - DrawerPanelContent, - Toolbar, - ToolbarContent, - ToolbarGroup, - Divider, - GenerateId, - Stack, - StackItem -} from '@patternfly/react-core'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-view'; -import sideBarStyles from '@patternfly/react-styles/css/components/Topology/topology-side-bar'; -import controlBarStyles from '@patternfly/react-styles/css/components/Topology/topology-controlbar'; - -export interface TopologyViewProps extends React.HTMLProps { - /** Additional classes added to the view */ - className?: string; - /** Topology inner container (canvas) */ - children?: React.ReactNode; - /** Context toolbar to be displayed at the top of the view, should contain components for changing context */ - contextToolbar?: React.ReactNode; - /** View toolbar to be displayed below the context toolbar, should contain components for changing view contents */ - viewToolbar?: React.ReactNode; - /** Topology control bar (typically a TopologyControlBar), used to manipulate the graph layout */ - controlBar?: React.ReactNode; - /** Topology side bar (typically a TopologySideBar), used to display information for elements in graph */ - sideBar?: React.ReactNode; - /** Flag if side bar is open */ - sideBarOpen?: boolean; - /** Flag if side bar is resizable, default false */ - sideBarResizable?: boolean; - /** The starting size of the side bar, in either pixels or percentage, only used if resizable. */ - defaultSideBarSize?: string; - /** The minimum size of the side bar, in either pixels or percentage. */ - minSideBarSize?: string; - /** The maximum size of the side bar, in either pixels or percentage. */ - maxSideBarSize?: string; - /** Callback for side bar resize end. */ - onSideBarResize?: (width: number, id: string) => void; -} - -export const TopologyView: React.FunctionComponent = ({ - className = '', - contextToolbar = null, - viewToolbar = null, - children = null, - controlBar = null, - sideBar = null, - sideBarResizable = false, - sideBarOpen = false, - defaultSideBarSize = '500px', - minSideBarSize = '150px', - maxSideBarSize = '100%', - onSideBarResize, - ...props -}: TopologyViewProps) => { - const topologyContent = !sideBarResizable ? ( - -
- {children} - {controlBar && {controlBar}} -
- {sideBar} -
- ) : ( - - - - {sideBar} - - } - > - -
- {children} - {controlBar && {controlBar}} -
-
-
-
-
- ); - - return ( - - {contextToolbar || viewToolbar ? ( - - - {randomId => ( - - {contextToolbar && ( - - {contextToolbar} - - )} - {viewToolbar && ( - - {viewToolbar} - - )} - - - )} - - - ) : null} - {topologyContent} - - ); -}; -TopologyView.displayName = 'TopologyView'; diff --git a/packages/react-topology/src/components/TopologyView/__tests__/TopologyView.test.tsx b/packages/react-topology/src/components/TopologyView/__tests__/TopologyView.test.tsx deleted file mode 100644 index 75d1a3e026e..00000000000 --- a/packages/react-topology/src/components/TopologyView/__tests__/TopologyView.test.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import * as React from 'react'; -import { render, screen } from '@testing-library/react'; -import { TopologyView } from '../index'; - -describe('TopologyView', () => { - test('should display an empty topology correctly', () => { - const { asFragment } = render(); - expect(asFragment()).toMatchSnapshot(); - }); - - test('should display topology correctly', () => { - const { asFragment } = render( - } - viewToolbar={
} - controlBar={
} - > -
- - ); - expect(asFragment()).toMatchSnapshot(); - }); - - test('should display topology sidebar correctly', () => { - render( - } - viewToolbar={
} - controlBar={
} - sideBar={
Test SideBar
} - sideBarOpen={false} - data-testid="test-id" - > -
- - ); - - const topologyViewHtml = screen.getByTestId('test-id').outerHTML; - - expect(topologyViewHtml).toContain('pf-topology-container__with-sidebar'); - expect(topologyViewHtml).not.toContain('pf-topology-container__with-sidebar--open'); - }); - test('should display topology w/ open sidebar correctly', () => { - render( - } - viewToolbar={
} - controlBar={
} - sideBar={
Test SideBar
} - sideBarOpen - data-testid="test-id" - > -
- - ); - - expect(screen.getByTestId('test-id').outerHTML).toContain('pf-topology-container__with-sidebar--open'); - }); - - test('should display resizable topology sidebar correctly', () => { - render( - } - viewToolbar={
} - controlBar={
} - sideBar={
Test SideBar
} - sideBarOpen={false} - sideBarResizable - data-testid="test-id" - > -
- - ); - - const topologyViewHtml = screen.getByTestId('test-id').outerHTML; - - expect(topologyViewHtml).toContain('pf-c-drawer'); - expect(topologyViewHtml).not.toContain('pf-c-drawer pf-m-expanded'); - }); - test('should display topology w/ open resizable sidebar correctly', () => { - render( - } - viewToolbar={
} - controlBar={
} - sideBar={
Test SideBar
} - sideBarOpen - data-testid="test-id" - > -
- - ); - - const topologyViewHtml = screen.getByTestId('test-id').outerHTML; - - expect(topologyViewHtml).toContain('pf-c-drawer'); - expect(topologyViewHtml).toContain('pf-c-drawer pf-m-expanded'); - }); -}); diff --git a/packages/react-topology/src/components/TopologyView/__tests__/__snapshots__/TopologyView.test.tsx.snap b/packages/react-topology/src/components/TopologyView/__tests__/__snapshots__/TopologyView.test.tsx.snap deleted file mode 100644 index 8eb871036c0..00000000000 --- a/packages/react-topology/src/components/TopologyView/__tests__/__snapshots__/TopologyView.test.tsx.snap +++ /dev/null @@ -1,115 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`TopologyView should display an empty topology correctly 1`] = ` - -
-
-
-
-
- -`; - -exports[`TopologyView should display topology correctly 1`] = ` - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
- -
- -
-
-
- -`; diff --git a/packages/react-topology/src/components/TopologyView/examples/ItemDetails.js b/packages/react-topology/src/components/TopologyView/examples/ItemDetails.js deleted file mode 100644 index 6bda8588978..00000000000 --- a/packages/react-topology/src/components/TopologyView/examples/ItemDetails.js +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { Title, TitleSizes } from '@patternfly/react-core'; -import { TopologySideBar } from '@patternfly/react-topology'; - -export class ItemDetails extends React.Component { - static displayName = 'ItemDetails'; - render() { - const { show, onClose } = this.props; - - const header = ( -
- - Item Details - -

Short description of the selected item.

-
- ); - - return ( - -
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et - dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex - ea commodo consequat. -

-
-

- Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est - laborum. -

-
-
- ); - } -} - -ItemDetails.propTypes = { - show: PropTypes.bool, - onClose: PropTypes.func -}; - -ItemDetails.defaultProps = { - show: false, - onClose: () => undefined -}; diff --git a/packages/react-topology/src/components/TopologyView/examples/ProjectToolbar.js b/packages/react-topology/src/components/TopologyView/examples/ProjectToolbar.js deleted file mode 100644 index 8e1996f8782..00000000000 --- a/packages/react-topology/src/components/TopologyView/examples/ProjectToolbar.js +++ /dev/null @@ -1,107 +0,0 @@ -import React from 'react'; -import { ToolbarItem, Dropdown, DropdownItem, DropdownToggle, DropdownPosition } from '@patternfly/react-core'; - -const projects = [ - { id: 1, name: 'Project 1' }, - { id: 2, name: 'Project 2' }, - { id: 3, name: 'Project 3' }, - { id: 4, name: 'Project 4' }, - { id: 'all', name: 'All' } -]; - -const applications = [ - { id: 1, name: 'Application 1' }, - { id: 2, name: 'Application 2' }, - { id: 3, name: 'Application 3' }, - { id: 4, name: 'Application 4' }, - { id: 'all', name: 'All' } -]; - -export class ProjectToolbar extends React.Component { - static displayName = 'ProjectToolbar'; - state = { - selectedProject: projects[4], - selectedApplication: applications[4], - projectDropDownOpen: false, - applicationDropDownOpen: false - }; - - onProjectDropDownToggle = isOpen => { - this.setState({ projectDropDownOpen: isOpen }); - }; - - onProjectSelect = (e, project) => { - e.preventDefault(); - this.setState({ selectedProject: project, projectDropDownOpen: false }); - }; - - onApplicationDropDownToggle = isOpen => { - this.setState({ applicationDropDownOpen: isOpen }); - }; - - onApplicationSelect = (e, application) => { - e.preventDefault(); - this.setState({ selectedApplication: application, applicationDropDownOpen: false }); - }; - - renderProjectDropdown = () => { - const { projectDropDownOpen, selectedProject } = this.state; - - return ( - - - - - - {selectedProject.name}} - isOpen={projectDropDownOpen} - dropdownItems={projects.map(project => ( - this.onProjectSelect(e, project)}> - {project.name} - - ))} - /> - - - ); - }; - - renderApplicationDropdown = () => { - const { applicationDropDownOpen, selectedApplication } = this.state; - - return ( - - - - - - {selectedApplication.name} - } - isOpen={applicationDropDownOpen} - dropdownItems={applications.map(application => ( - this.onApplicationSelect(e, application)}> - {application.name} - - ))} - /> - - - ); - }; - - render() { - return ( - - {this.renderProjectDropdown()} - {this.renderApplicationDropdown()} - - ); - } -} diff --git a/packages/react-topology/src/components/TopologyView/examples/Topology.md b/packages/react-topology/src/components/TopologyView/examples/Topology.md deleted file mode 100644 index a682bb20393..00000000000 --- a/packages/react-topology/src/components/TopologyView/examples/Topology.md +++ /dev/null @@ -1,155 +0,0 @@ ---- -id: Topology view -section: components ---- - -Note: Topology lives in its own package at [`@patternfly/react-topology`](https://www.npmjs.com/package/@patternfly/react-topology) - -import ExternalLinkAltIcon from '@patternfly/react-icons/dist/esm/icons/external-link-alt-icon'; -import FilmIcon from '@patternfly/react-icons/dist/esm/icons/film-icon'; -import GlassCheersIcon from '@patternfly/react-icons/dist/esm/icons/glass-cheers-icon'; -import { TopologyView, TopologyControlBar, createTopologyControlButtons, TopologySideBar } from '@patternfly/react-topology'; -import { ProjectToolbar } from './ProjectToolbar'; -import { ViewToolbar } from './ViewToolbar'; -import { ItemDetails } from './ItemDetails'; -import './topology-example.css'; - -## Examples -### Default controls -```js -import React from 'react'; -import { TopologyView, TopologyControlBar, createTopologyControlButtons, TopologySideBar } from '@patternfly/react-topology'; -import { ProjectToolbar } from './ProjectToolbar'; -import { ViewToolbar } from './ViewToolbar'; -import { ItemDetails } from './ItemDetails'; - -class DefaultTopologyView extends React.Component { - constructor(props) { - super(props); - - this.state = { detailsShown: false }; - } - - render() { - const { detailsShown } = this.state; - const controlButtons = createTopologyControlButtons(); - const sideBar = this.setState({ detailsShown: false })} />; - - return ( - } - viewToolbar={} - controlBar={} - sideBar={sideBar} - sideBarOpen={detailsShown} - > - - - ); - } -} -``` - -### Selected controls -```js -import React from 'react'; -import { TopologyView, TopologyControlBar, createTopologyControlButtons } from '@patternfly/react-topology'; -import { ItemDetails } from './ItemDetails'; -import { ViewToolbar } from './ViewToolbar'; - -class SelectedTopologyView extends React.Component { - constructor(props) { - super(props); - - this.state = { detailsShown: false }; - } - - render() { - const { detailsShown } = this.state; - const sideBar = this.setState({ detailsShown: false })} />; - const controlButtons = createTopologyControlButtons({ fitToScreen: false, legend: false }); - - return ( - } - controlBar={} - sideBar={sideBar} - sideBarOpen={detailsShown} - > - - - ); - } -} -``` - -### Custom controls -```js -import React from 'react'; -import ExternalLinkAltIcon from '@patternfly/react-icons/dist/esm/icons/external-link-alt-icon'; -import FilmIcon from '@patternfly/react-icons/dist/esm/icons/film-icon'; -import GlassCheersIcon from '@patternfly/react-icons/dist/esm/icons/glass-cheers-icon'; -import { TopologyView, TopologyControlBar, createTopologyControlButtons } from '@patternfly/react-topology'; -import { ItemDetails } from './ItemDetails'; -import { ViewToolbar } from './ViewToolbar'; - -class CustomTopologyView extends React.Component { - constructor(props) { - super(props); - - this.state = { detailsShown: false }; - } - - render() { - const { detailsShown } = this.state; - const sideBar = this.setState({ detailsShown: false })} />; - const customButtons = [ - { - id: 'custom-1', - icon: , - tooltip: 'External Link', - ariaLabel: 'external link', - callback: null, - disabled: true, - hidden: false - }, - { - id: 'custom-2', - icon: , - tooltip: 'Watch', - ariaLabel: 'watch', - callback: null, - disabled: false, - hidden: false - }, - { - id: 'custom-3', - icon: , - tooltip: 'Cheers', - ariaLabel: 'cheers', - callback: null, - disabled: false, - hidden: true - }, - ] - const controlButtons = createTopologyControlButtons({ fitToScreen: false, customButtons}); - - return ( - } - controlBar={} - sideBar={sideBar} - sideBarOpen={detailsShown} - > - - - ); - } -} -``` diff --git a/packages/react-topology/src/components/TopologyView/examples/ViewToolbar.js b/packages/react-topology/src/components/TopologyView/examples/ViewToolbar.js deleted file mode 100644 index 311228a17f5..00000000000 --- a/packages/react-topology/src/components/TopologyView/examples/ViewToolbar.js +++ /dev/null @@ -1,142 +0,0 @@ -import React from 'react'; -import { - Button, - ToolbarGroup, - ToolbarItem, - ToolbarToggleGroup, - Dropdown, - DropdownPosition, - DropdownToggle, - DropdownItem, - KebabToggle, - TextInput -} from '@patternfly/react-core'; -import FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon'; - -export class ViewToolbar extends React.Component { - static displayName = 'ViewToolbar'; - state = { - filterType: 'Name', - filterValue: '', - filterDropDownOpen: false, - actionKebabOpen: false - }; - - onFilterDropDownToggle = isOpen => { - this.setState({ filterDropDownOpen: isOpen }); - }; - - onFilterTypeSelect = (e, filterType) => { - e.preventDefault(); - this.setState({ - filterType, - filterDropDownOpen: false, - filterValue: filterType === this.state.filterType ? this.state.filterValue : '' - }); - }; - - handleFilterInputChange = value => { - this.setState({ filterValue: value }); - }; - - onActionKebabToggle = isOpen => { - this.setState({ actionKebabOpen: isOpen }); - }; - - onActionKebabSelect = e => { - e.preventDefault(); - this.setState({ actionKebabOpen: false }); - }; - - renderFilterInput = () => { - const { filterValue } = this.state; - return ( - - ); - }; - - renderFilterTypeDropdown = () => { - const { filterDropDownOpen, filterType } = this.state; - return ( - - - {filterType} - - } - isOpen={filterDropDownOpen} - dropdownItems={[ - this.onFilterTypeSelect(e, 'Name')}> - Name - , - this.onFilterTypeSelect(e, 'Type')}> - Type - , - this.onFilterTypeSelect(e, 'Status')}> - Status - - ]} - /> - ); - }; - - renderActionsdKebab = () => { - const { actionKebabOpen } = this.state; - - return ( - } - isOpen={actionKebabOpen} - isPlain - dropdownItems={[ - this.onActionKebabSelect(e, 'Action 3')}> - Action 3 - , - this.onActionKebabSelect(e, 'Action 4')}> - Action 4 - , - this.onActionKebabSelect(e, 'Disabled Action')}> - Disabled Action - - ]} - /> - ); - }; - - render() { - return ( - - }> - - {this.renderFilterTypeDropdown()} - {this.renderFilterInput()} - - - - - - - - - - {this.renderActionsdKebab()} - - - ); - } -} diff --git a/packages/react-topology/src/components/TopologyView/examples/topology-example.css b/packages/react-topology/src/components/TopologyView/examples/topology-example.css deleted file mode 100644 index 06606a6967c..00000000000 --- a/packages/react-topology/src/components/TopologyView/examples/topology-example.css +++ /dev/null @@ -1,18 +0,0 @@ -.ws-react-c-topology { - height: 500px; -} - -.ws-react-c-topology .pf-l-stack { - margin: -9px; - width: calc(100% + 18px); -} - -.ws-react-c-topology .pf-topology-view__project-toolbar .pf-c-dropdown > button { - justify-content: space-between; - width: 150px; -} - -.ws-react-c-topology .topology-view-filter-dropdown > button { - justify-content: space-between; - width: 130px; -} diff --git a/packages/react-topology/src/components/TopologyView/index.ts b/packages/react-topology/src/components/TopologyView/index.ts deleted file mode 100644 index 8124fd0742f..00000000000 --- a/packages/react-topology/src/components/TopologyView/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './TopologyView'; diff --git a/packages/react-topology/src/components/VisualizationProvider.tsx b/packages/react-topology/src/components/VisualizationProvider.tsx deleted file mode 100644 index d339570e4a9..00000000000 --- a/packages/react-topology/src/components/VisualizationProvider.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import * as React from 'react'; -import ControllerContext from '../utils/ControllerContext'; -import { Controller } from '../types'; -import { Visualization } from '../Visualization'; - -interface VisualizationSurfaceProps { - controller?: Controller; - children?: React.ReactNode; -} - -const VisualizationProvider: React.FunctionComponent = ({ controller, children }) => { - const controllerRef = React.useRef(); - if (controller && controllerRef.current !== controller) { - controllerRef.current = controller; - } else if (!controllerRef.current) { - controllerRef.current = new Visualization(); - } - - return {children}; -}; - -export default VisualizationProvider; diff --git a/packages/react-topology/src/components/VisualizationSurface.tsx b/packages/react-topology/src/components/VisualizationSurface.tsx deleted file mode 100644 index 968e4cd7dd1..00000000000 --- a/packages/react-topology/src/components/VisualizationSurface.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import * as React from 'react'; -import * as _ from 'lodash'; -import { action } from 'mobx'; -// https://github.com/mobxjs/mobx-react#observer-batching -import 'mobx-react/batchingForReactDom'; -import { observer } from 'mobx-react'; -import ReactMeasure from 'react-measure'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { State } from '../types'; -import SVGDefsProvider from './defs/SVGDefsProvider'; -import ElementWrapper from './ElementWrapper'; -import Dimensions from '../geom/Dimensions'; -import useVisualizationController from '../hooks/useVisualizationController'; - -import '@patternfly/react-styles/css/components/Topology/topology-components.css'; - -interface VisualizationSurfaceProps { - state?: State; - children?: React.ReactNode; -} - -const stopEvent = (e: React.MouseEvent): void => { - e.preventDefault(); - e.stopPropagation(); -}; - -const VisualizationSurface: React.FunctionComponent = ({ state }) => { - const controller = useVisualizationController(); - - React.useEffect(() => { - state && controller.setState(state); - }, [controller, state]); - - const onMeasure = React.useMemo( - () => - _.debounce( - action((contentRect: { client: { width: number; height: number } }) => { - controller.getGraph().setDimensions(new Dimensions(contentRect.client.width, contentRect.client.height)); - }), - 100, - { leading: true, trailing: true } - ), - [controller] - ); - - // dispose of onMeasure - React.useEffect(() => () => onMeasure.cancel(), [onMeasure]); - - if (!controller.hasGraph()) { - return null; - } - - const graph = controller.getGraph(); - - return ( - - {({ measureRef }: { measureRef: React.LegacyRef }) => ( - // render an outer div because react-measure doesn't seem to fire events properly on svg resize -
- - - - - -
- )} -
- ); -}; - -export default observer(VisualizationSurface); diff --git a/packages/react-topology/src/components/__tests__/ComputeElementDimensions.test.tsx b/packages/react-topology/src/components/__tests__/ComputeElementDimensions.test.tsx deleted file mode 100644 index 5e5d5d368ce..00000000000 --- a/packages/react-topology/src/components/__tests__/ComputeElementDimensions.test.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import { render, screen } from '@testing-library/react'; -import ComputeElementDimensions from '../ComputeElementDimensions'; - -describe('ComputeElementDimensions', () => { - it('should render invisible group', () => { - render( - - - - ); - - expect( - screen - .getByTestId('wrapper-test-id') - .querySelector('g') - ).toHaveAttribute('style', 'visibility: hidden;'); - }); -}); diff --git a/packages/react-topology/src/components/contextmenu/ContextMenu.tsx b/packages/react-topology/src/components/contextmenu/ContextMenu.tsx deleted file mode 100644 index 6f2dc3c66f2..00000000000 --- a/packages/react-topology/src/components/contextmenu/ContextMenu.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import * as React from 'react'; -import { DropdownMenu, DropdownContext } from '@patternfly/react-core'; -import { css } from '@patternfly/react-styles'; -import topologyStyles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import styles from '@patternfly/react-styles/css/components/Dropdown/dropdown'; -// FIXME fully qualified due to the effect of long build times on storybook -import Popper from '../popper/Popper'; - -type ContextMenuProps = Pick< - React.ComponentProps, - 'children' | 'container' | 'className' | 'open' | 'reference' | 'onRequestClose' ->; - -const ContextMenu: React.FunctionComponent = ({ - children, - open = true, - onRequestClose, - ...other -}) => { - const [isOpen, setOpen] = React.useState(!!open); - React.useEffect(() => { - setOpen(open); - }, [open]); - - const handleOnRequestClose = React.useCallback(() => { - onRequestClose ? onRequestClose() : setOpen(false); - }, [onRequestClose]); - - return ( - - -
- - {children} - -
-
-
- ); -}; - -export default ContextMenu; diff --git a/packages/react-topology/src/components/contextmenu/ContextSubMenuItem.tsx b/packages/react-topology/src/components/contextmenu/ContextSubMenuItem.tsx deleted file mode 100644 index fc97b4dbafc..00000000000 --- a/packages/react-topology/src/components/contextmenu/ContextSubMenuItem.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import * as React from 'react'; -import { DropdownMenu, DropdownItem } from '@patternfly/react-core'; -import { css } from '@patternfly/react-styles'; -import topologyStyles from '@patternfly/react-styles/css/components/Topology/topology-components'; -// FIXME fully qualified due to the effect of long build times on storybook -import Popper from '../popper/Popper'; -import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-icon'; - -interface ContextSubMenuItemProps { - label: React.ReactNode; - children: React.ReactNode[]; -} - -const ContextSubMenuItem: React.FunctionComponent = ({ label, children, ...other }) => { - const nodeRef = React.useRef(null); - const subMenuRef = React.useRef(null); - const [open, setOpen] = React.useState(false); - const referenceCb = React.useCallback(() => nodeRef.current || { x: 0, y: 0 }, []); - - return ( - <> - e.stopPropagation()} - // mouse enter will open the sub menu - onMouseEnter={() => setOpen(true)} - onMouseLeave={e => { - // if the mouse leaves this item, close the sub menu only if the mouse did not enter the sub menu itself - if (!subMenuRef.current || !subMenuRef.current.contains(e.relatedTarget as Node)) { - setOpen(false); - } - }} - onKeyDown={e => { - // open the sub menu on enter or right arrow - if (e.key === 'ArrowRight' || e.key === 'Enter') { - setOpen(true); - e.stopPropagation(); - } - }} - > - {label} - - - } - /> - { - // only close the sub menu if clicking anywhere outside the menu item that owns the sub menu - if (!e || !nodeRef.current || !nodeRef.current.contains(e.target as Node)) { - setOpen(false); - } - }} - reference={referenceCb} - // use the parent node to capture the li - container={nodeRef.current ? nodeRef.current.parentElement : nodeRef.current} - returnFocus - > -
{ - // only close the sub menu if the mouse does not enter the item - if (!nodeRef.current || !nodeRef.current.contains(e.relatedTarget as Node)) { - setOpen(false); - } - }} - onKeyDown={e => { - // close the sub menu on left arrow - if (e.key === 'ArrowLeft') { - setOpen(false); - e.stopPropagation(); - } - }} - > - - {children} - -
-
- - ); -}; - -export default ContextSubMenuItem; diff --git a/packages/react-topology/src/components/contextmenu/index.ts b/packages/react-topology/src/components/contextmenu/index.ts deleted file mode 100644 index 7a67e6beb1d..00000000000 --- a/packages/react-topology/src/components/contextmenu/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { default as ContextMenu } from './ContextMenu'; -export { default as ContextSubMenuItem } from './ContextSubMenuItem'; - -// re-export dropdown components as context menu components -export { DropdownItem as ContextMenuItem, DropdownSeparator as ContextMenuSeparator } from '@patternfly/react-core'; diff --git a/packages/react-topology/src/components/decorators/Decorator.tsx b/packages/react-topology/src/components/decorators/Decorator.tsx deleted file mode 100644 index 3ef9f6dd0e2..00000000000 --- a/packages/react-topology/src/components/decorators/Decorator.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import * as React from 'react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import SvgDropShadowFilter from '../svg/SvgDropShadowFilter'; -import { createSvgIdUrl, useHover } from '../../utils'; -import { DEFAULT_DECORATOR_PADDING } from '../nodes'; - -interface DecoratorTypes { - children?: React.ReactNode; - className?: string; - x: number; - y: number; - radius: number; - padding?: number; - showBackground?: boolean; - icon?: React.ReactNode; - onClick?(event: React.MouseEvent): void; - ariaLabel?: string; - circleRef?: React.Ref; -} - -const HOVER_FILTER_ID = 'DecoratorDropShadowHoverFilterId'; - -const Decorator: React.FunctionComponent = ({ - className, - x, - y, - showBackground, - radius, - padding = DEFAULT_DECORATOR_PADDING, - children, - icon, - onClick, - ariaLabel, - circleRef -}) => { - const [hover, hoverRef] = useHover(); - const iconRadius = radius - padding; - - return ( - { - e.stopPropagation(); - onClick(e); - }, - role: 'button', - 'aria-label': ariaLabel - } - : null)} - > - - {showBackground && ( - - )} - - {icon ? ( - - {icon} - - ) : null} - {children} - - - ); -}; - -export default Decorator; diff --git a/packages/react-topology/src/components/decorators/index.ts b/packages/react-topology/src/components/decorators/index.ts deleted file mode 100644 index 5041286483e..00000000000 --- a/packages/react-topology/src/components/decorators/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Decorator } from './Decorator'; diff --git a/packages/react-topology/src/components/defs/Defs.tsx b/packages/react-topology/src/components/defs/Defs.tsx deleted file mode 100644 index 71e783d1c68..00000000000 --- a/packages/react-topology/src/components/defs/Defs.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import * as React from 'react'; -import { DefsState, DefsMap } from './SVGDefsProvider'; -export class Defs extends React.PureComponent<{}, DefsState> { - constructor(props: {}) { - super(props); - this.state = {}; - } - public setDefs(defs: DefsMap) { - // setting the state will re-render this component - this.setState({ defs: { ...defs } }); - } - render() { - const { defs } = this.state; - return defs ? ( - - {Object.keys(defs).map(id => ( - {defs[id].node} - ))} - - ) : null; - } -} diff --git a/packages/react-topology/src/components/defs/SVGDefs.tsx b/packages/react-topology/src/components/defs/SVGDefs.tsx deleted file mode 100644 index f37426ab6b8..00000000000 --- a/packages/react-topology/src/components/defs/SVGDefs.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import * as React from 'react'; -import SVGDefsContext, { SVGDefsContextProps } from './SVGDefsContext'; -import { SVGDefsSetter } from './SVGDefsSetter'; - -interface SVGDefsProps { - id: string; - children: React.ReactNode; -} - -export type SVGDefsSetterProps = SVGDefsContextProps & SVGDefsProps; - -/** - * Contributes `children` to the parent SVG `` element. - * A contribution is assumed to be static in nature in that the children will never change - * for a given ID. This is because there may be multiple children referencing the same defs contribution. - * The assumption must be that there is not a single owner but many owners and therefore each - * owner must be contributing the same def. - */ -export default class SVGDefs extends React.Component { - shouldComponentUpdate() { - return false; - } - - render() { - return ( - - {({ addDef, removeDef }) => } - - ); - } -} diff --git a/packages/react-topology/src/components/defs/SVGDefsContext.ts b/packages/react-topology/src/components/defs/SVGDefsContext.ts deleted file mode 100644 index cbd57a92d47..00000000000 --- a/packages/react-topology/src/components/defs/SVGDefsContext.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { createContext, ReactNode } from 'react'; - -export interface SVGDefsContextProps { - addDef(id: string, node: ReactNode): void; - removeDef(id: string): void; -} - -const SVGDefsContext = createContext(undefined as any); - -export default SVGDefsContext; diff --git a/packages/react-topology/src/components/defs/SVGDefsProvider.tsx b/packages/react-topology/src/components/defs/SVGDefsProvider.tsx deleted file mode 100644 index c8655433f62..00000000000 --- a/packages/react-topology/src/components/defs/SVGDefsProvider.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import * as React from 'react'; -import SVGDefsContext, { SVGDefsContextProps } from './SVGDefsContext'; -import { Defs } from './Defs'; - -export interface DefsMap { - [id: string]: { - count: number; - node: React.ReactNode; - }; -} - -export interface DefsState { - defs?: DefsMap; -} - -export interface SVGDefsProviderProps { - children?: React.ReactNode; -} - -/** - * Renders a `` element and sets up a {@link SVGDefsContext} provider such that child components - * may contribute to the `` without the parent component needing explicit knowledge of each contribution. - * This helps decouple the parent implementation from the children and ensures that duplicate defs entries, - * such as filters, are eliminated. - */ -class SVGDefsProvider extends React.Component { - private readonly defsRef = React.createRef(); - - private readonly defs: DefsMap = {}; - - private contextValue: SVGDefsContextProps = { - addDef: (id, node) => { - const defObj = this.defs[id]; - if (defObj) { - defObj.count++; - } else { - this.defs[id] = { - count: 1, - node - }; - this.updateDefs(); - } - }, - removeDef: id => { - const defObj = this.defs[id]; - if (--defObj.count === 0) { - delete this.defs[id]; - this.updateDefs(); - } - } - }; - - private updateDefs() { - // Set the defs directly on the child component so that only it will re-render. - // Does not use `setState` because otherwise all child components would be re-renders again - // when only the `Defs` component needs to be rendered. - this.defsRef.current && this.defsRef.current.setDefs(this.defs); - } - - render() { - return ( - - - {this.props.children} - - ); - } -} - -export default SVGDefsProvider; diff --git a/packages/react-topology/src/components/defs/SVGDefsSetter.tsx b/packages/react-topology/src/components/defs/SVGDefsSetter.tsx deleted file mode 100644 index b7b7fe032f9..00000000000 --- a/packages/react-topology/src/components/defs/SVGDefsSetter.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import * as React from 'react'; -import SVGDefsContext from './SVGDefsContext'; -import { SVGDefsSetterProps } from './SVGDefs'; -export class SVGDefsSetter extends React.Component { - static displayName = 'SVGDefsSetter'; - static contextType = SVGDefsContext; - context!: React.ContextType; - componentDidMount() { - const { addDef, id, children } = this.props; - addDef(id, children); - } - componentDidUpdate() { - const { addDef, id, children } = this.props; - addDef(id, children); - } - componentWillUnmount() { - const { removeDef, id } = this.props; - removeDef(id); - } - render(): any { - return null; - } -} diff --git a/packages/react-topology/src/components/defs/__mocks__/SVGDefs.tsx b/packages/react-topology/src/components/defs/__mocks__/SVGDefs.tsx deleted file mode 100644 index 13621d7a576..00000000000 --- a/packages/react-topology/src/components/defs/__mocks__/SVGDefs.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import * as React from 'react'; -import SVGDefs from '../SVGDefs'; - -// This mock simply renders the `defs` in place. -const SvgDefsMock: React.FunctionComponent> = ({ id, children }) => ( - {children} -); - -export default SvgDefsMock; diff --git a/packages/react-topology/src/components/defs/__tests__/Defs.test.tsx b/packages/react-topology/src/components/defs/__tests__/Defs.test.tsx deleted file mode 100644 index f808d5a5440..00000000000 --- a/packages/react-topology/src/components/defs/__tests__/Defs.test.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import { render, screen } from '@testing-library/react'; -import { Defs } from '../Defs'; - -describe('Defs', () => { - it('should render initially empty', () => { - render( -
- -
- ); - expect(screen.getByTestId('wrapper-test-id').querySelector('defs')).toBeNull(); - }); -}); diff --git a/packages/react-topology/src/components/defs/__tests__/SVGDefs.spec.tsx b/packages/react-topology/src/components/defs/__tests__/SVGDefs.spec.tsx deleted file mode 100644 index a3d053dd13c..00000000000 --- a/packages/react-topology/src/components/defs/__tests__/SVGDefs.spec.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import * as React from 'react'; - -import { render } from '@testing-library/react'; - -import SVGDefs, { SVGDefsSetterProps } from '../SVGDefs'; -import SVGDefsContext, { SVGDefsContextProps } from '../SVGDefsContext'; -import { SVGDefsSetter } from '../SVGDefsSetter'; - -describe('SVGDefs', () => { - it('should get #addDef and #removeDef from context', () => { - const contextProps: SVGDefsContextProps = { - addDef: jest.fn(), - removeDef: jest.fn() - }; - const props: React.ComponentProps = { - id: 'foo', - children: - }; - const { unmount } = render( - - - - ); - - // addDef called on mount and removeDef on unmount being called - // signifies the context props were passed into SVGDefs (and therefore SVGDefsSetter). - expect(contextProps.addDef).toHaveBeenCalledWith("foo", ); - - unmount(); - expect(contextProps.removeDef).toHaveBeenLastCalledWith("foo"); - }); - - describe('SVGDefsSetter', () => { - it('should callback #addDef and #removeDef on update', () => { - const props: SVGDefsSetterProps = { - id: 'foo', - addDef: jest.fn(), - removeDef: jest.fn(), - children: , - }; - - const { unmount, rerender } = render(); - expect(props.addDef).toHaveBeenCalledWith(props.id, props.children); - - // test update - const newChild = ; - rerender({newChild}) - expect(props.addDef).toHaveBeenCalledTimes(2); - expect(props.addDef).toHaveBeenLastCalledWith(props.id, newChild); - - // test unmount - unmount(); - expect(props.removeDef).toHaveBeenCalledTimes(1); - expect(props.removeDef).toHaveBeenLastCalledWith(props.id); - }); - }); -}); diff --git a/packages/react-topology/src/components/defs/index.ts b/packages/react-topology/src/components/defs/index.ts deleted file mode 100644 index 6aedd4fe67f..00000000000 --- a/packages/react-topology/src/components/defs/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as SVGDefs } from './SVGDefs'; -export { default as SVGDefsProvider } from './SVGDefsProvider'; diff --git a/packages/react-topology/src/components/edges/DefaultConnectorTag.tsx b/packages/react-topology/src/components/edges/DefaultConnectorTag.tsx deleted file mode 100644 index fb1f3b9c8c0..00000000000 --- a/packages/react-topology/src/components/edges/DefaultConnectorTag.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import * as React from 'react'; -import Point from '../../geom/Point'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { StatusModifier, useSize } from '../../utils'; -import { NodeStatus } from '../../types'; - -interface DefaultConnectorTagProps { - className?: string; - startPoint: Point; - endPoint: Point; - tag: string; - status?: NodeStatus; - paddingX?: number; - paddingY?: number; -} - -const DefaultConnectorTag: React.FunctionComponent = ({ - className, - startPoint, - endPoint, - tag, - status, - paddingX = 4, - paddingY = 2, - ...other -}) => { - const [textSize, textRef] = useSize([tag, className]); - const { width, height, startX, startY } = React.useMemo(() => { - if (!textSize) { - return { - width: 0, - height: 0, - startX: 0, - startY: 0 - }; - } - const width = textSize ? textSize.width + paddingX * 2 : 0; - const height = textSize ? textSize.height + paddingY * 2 : 0; - const startX = -width / 2; - const startY = -height / 2; - return { - width, - height, - startX, - startY - }; - }, [textSize, paddingX, paddingY]); - - return ( - - {textSize && ( - - )} - - {tag} - - - ); -}; - -export default DefaultConnectorTag; diff --git a/packages/react-topology/src/components/edges/DefaultEdge.tsx b/packages/react-topology/src/components/edges/DefaultEdge.tsx deleted file mode 100644 index fb776d4a960..00000000000 --- a/packages/react-topology/src/components/edges/DefaultEdge.tsx +++ /dev/null @@ -1,162 +0,0 @@ -import * as React from 'react'; -import * as _ from 'lodash'; -import { observer } from 'mobx-react'; -import { Edge, EdgeTerminalType, NodeStatus } from '../../types'; -import { - WithContextMenuProps, - WithRemoveConnectorProps, - WithSelectionProps, - WithSourceDragProps, - WithTargetDragProps -} from '../../behavior'; -import { useHover } from '../../utils'; -import { Layer } from '../layers'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { getEdgeAnimationDuration, getEdgeStyleClassModifier } from '../../utils/style-utils'; -import DefaultConnectorTerminal from './terminals/DefaultConnectorTerminal'; -import { TOP_LAYER } from '../../const'; -import DefaultConnectorTag from './DefaultConnectorTag'; -import { Point } from '../../geom'; -import { getConnectorStartPoint } from './terminals/terminalUtils'; - -type BaseEdgeProps = { - children?: React.ReactNode; - element: Edge; - dragging?: boolean; - className?: string; - animationDuration?: number; - startTerminalType?: EdgeTerminalType; - startTerminalClass?: string; - startTerminalStatus?: NodeStatus; - startTerminalSize?: number; - endTerminalType?: EdgeTerminalType; - endTerminalClass?: string; - endTerminalStatus?: NodeStatus; - endTerminalSize?: number; - tag?: string; - tagClass?: string; - tagStatus?: NodeStatus; -} & Partial< - WithRemoveConnectorProps & WithSourceDragProps & WithTargetDragProps & WithSelectionProps & WithContextMenuProps ->; - -const BaseEdge: React.FunctionComponent = ({ - element, - dragging, - sourceDragRef, - targetDragRef, - animationDuration, - onShowRemoveConnector, - onHideRemoveConnector, - startTerminalType = EdgeTerminalType.none, - startTerminalClass, - startTerminalStatus, - startTerminalSize = 14, - endTerminalType = EdgeTerminalType.directional, - endTerminalClass, - endTerminalStatus, - endTerminalSize = 14, - tag, - tagClass, - tagStatus, - children, - className, - selected, - onSelect, - onContextMenu -}) => { - const [hover, hoverRef] = useHover(); - const startPoint = element.getStartPoint(); - const endPoint = element.getEndPoint(); - - // eslint-disable-next-line patternfly-react/no-layout-effect - React.useLayoutEffect(() => { - if (hover && !dragging) { - onShowRemoveConnector && onShowRemoveConnector(); - } else { - onHideRemoveConnector && onHideRemoveConnector(); - } - }, [hover, dragging, onShowRemoveConnector, onHideRemoveConnector]); - - const groupClassName = css( - styles.topologyEdge, - className, - dragging && 'pf-m-dragging', - hover && !dragging && 'pf-m-hover', - selected && !dragging && 'pf-m-selected' - ); - - const edgeAnimationDuration = animationDuration ?? getEdgeAnimationDuration(element.getEdgeAnimationSpeed()); - const linkClassName = css(styles.topologyEdgeLink, getEdgeStyleClassModifier(element.getEdgeStyle())); - - const bendpoints = element.getBendpoints(); - - const d = `M${startPoint.x} ${startPoint.y} ${bendpoints.map((b: Point) => `L${b.x} ${b.y} `).join('')}L${ - endPoint.x - } ${endPoint.y}`; - - const bgStartPoint = - !startTerminalType || startTerminalType === EdgeTerminalType.none - ? [startPoint.x, startPoint.y] - : getConnectorStartPoint(_.head(bendpoints) || endPoint, startPoint, startTerminalSize); - const bgEndPoint = - !endTerminalType || endTerminalType === EdgeTerminalType.none - ? [endPoint.x, endPoint.y] - : getConnectorStartPoint(_.last(bendpoints) || startPoint, endPoint, endTerminalSize); - const backgroundPath = `M${bgStartPoint[0]} ${bgStartPoint[1]} ${bendpoints - .map((b: Point) => `L${b.x} ${b.y} `) - .join('')}L${bgEndPoint[0]} ${bgEndPoint[1]}`; - - return ( - - - - - {tag && ( - - )} - - - {children} - - - ); -}; - -export default observer(BaseEdge); diff --git a/packages/react-topology/src/components/edges/index.ts b/packages/react-topology/src/components/edges/index.ts deleted file mode 100644 index 5af71c91dc1..00000000000 --- a/packages/react-topology/src/components/edges/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { default as DefaultEdge } from './DefaultEdge'; -export { default as DefaultConntectorTag } from './DefaultConnectorTag'; -export * from './terminals'; diff --git a/packages/react-topology/src/components/edges/terminals/ConnectorArrow.tsx b/packages/react-topology/src/components/edges/terminals/ConnectorArrow.tsx deleted file mode 100644 index e9c4f1fbe9a..00000000000 --- a/packages/react-topology/src/components/edges/terminals/ConnectorArrow.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import * as React from 'react'; -import * as _ from 'lodash'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import Point from '../../../geom/Point'; -import { ConnectDragSource } from '../../../behavior/dnd-types'; -import { getConnectorStartPoint, getConnectorRotationAngle, getConnectorBoundingBox } from './terminalUtils'; - -interface ConnectorArrowProps { - startPoint: Point; - endPoint: Point; - className?: string; - isTarget?: boolean; - size?: number; - dragRef?: ConnectDragSource; -} - -const pointsStringFromPoints = (points: [number, number][]): string => - _.reduce(points, (result: string, nextPoint: [number, number]) => `${result} ${nextPoint[0]},${nextPoint[1]}`, ''); - -const ConnectorArrow: React.FunctionComponent = ({ - startPoint, - endPoint, - className = '', - size = 14, - dragRef -}) => { - const polygonPoints = React.useMemo( - () => - pointsStringFromPoints([ - [0, size / 2], - [0, -size / 2], - [size, 0] - ]), - [size] - ); - - const boundingPoints = React.useMemo(() => { - if (startPoint || !endPoint) { - return null; - } - return pointsStringFromPoints(getConnectorBoundingBox(startPoint, endPoint, size)); - }, [endPoint, size, startPoint]); - - if (!startPoint || !endPoint) { - return null; - } - - const connectorStartPoint = getConnectorStartPoint(startPoint, endPoint, size); - const angleDeg = getConnectorRotationAngle(startPoint, endPoint); - - const classNames = css(styles.topologyConnectorArrow, className, dragRef && 'pf-m-draggable'); - - return ( - - - - - ); -}; - -export default ConnectorArrow; diff --git a/packages/react-topology/src/components/edges/terminals/ConnectorArrowAlt.tsx b/packages/react-topology/src/components/edges/terminals/ConnectorArrowAlt.tsx deleted file mode 100644 index efa6f013744..00000000000 --- a/packages/react-topology/src/components/edges/terminals/ConnectorArrowAlt.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import * as React from 'react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import Point from '../../../geom/Point'; -import { ConnectDragSource } from '../../../behavior/dnd-types'; -import ConnectorArrow from './ConnectorArrow'; - -interface ConnectorArrowAltProps { - startPoint: Point; - endPoint: Point; - className?: string; - isTarget?: boolean; - size?: number; - dragRef?: ConnectDragSource; -} - -const ConnectorArrowAlt: React.FunctionComponent = ({ - startPoint, - endPoint, - className = '', - size, - dragRef -}) => { - const classes = css( - styles.topologyConnectorArrow, - styles.modifiers.altConnectorArrow, - className, - dragRef && 'pf-m-draggable' - ); - return ( - - ); -}; - -export default ConnectorArrowAlt; diff --git a/packages/react-topology/src/components/edges/terminals/ConnectorCircle.tsx b/packages/react-topology/src/components/edges/terminals/ConnectorCircle.tsx deleted file mode 100644 index 460a3065b56..00000000000 --- a/packages/react-topology/src/components/edges/terminals/ConnectorCircle.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import * as React from 'react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import Point from '../../../geom/Point'; -import { ConnectDragSource } from '../../../behavior/dnd-types'; -import { getConnectorStartPoint } from './terminalUtils'; - -interface ConnectorCircleProps { - startPoint: Point; - endPoint: Point; - className?: string; - isTarget?: boolean; - size?: number; - dragRef?: ConnectDragSource; -} - -const ConnectorCircle: React.FunctionComponent = ({ - startPoint, - endPoint, - className = '', - isTarget = true, - size = 14, - dragRef -}) => { - if (!startPoint || !endPoint) { - return null; - } - - const connectorStartPoint = getConnectorStartPoint(startPoint, endPoint, size / 2); // add stroke width rather than rotating - const classNames = css( - styles.topologyConnectorArrow, - styles.topologyConnectorCircle, - className, - !isTarget && styles.modifiers.source, - dragRef && 'pf-m-draggable' - ); - - return ( - - - - ); -}; - -export default ConnectorCircle; diff --git a/packages/react-topology/src/components/edges/terminals/ConnectorCross.tsx b/packages/react-topology/src/components/edges/terminals/ConnectorCross.tsx deleted file mode 100644 index e0127f75333..00000000000 --- a/packages/react-topology/src/components/edges/terminals/ConnectorCross.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import * as React from 'react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import Point from '../../../geom/Point'; -import { ConnectDragSource } from '../../../behavior/dnd-types'; -import { getConnectorRotationAngle, getConnectorStartPoint } from './terminalUtils'; - -interface ConnectorCrossProps { - startPoint: Point; - endPoint: Point; - className?: string; - isTarget?: boolean; - size?: number; - dragRef?: ConnectDragSource; -} - -const ConnectorCross: React.FunctionComponent = ({ - startPoint, - endPoint, - className = '', - isTarget = true, - size = 14, - dragRef -}) => { - if (!startPoint || !endPoint) { - return null; - } - - const width = size / 4; - const yDelta = size / 2; - const connectorStartPoint = getConnectorStartPoint(startPoint, endPoint, size); - const angleDeg = getConnectorRotationAngle(startPoint, endPoint); - - const classNames = css( - styles.topologyConnectorArrow, - styles.topologyConnectorCross, - className, - !isTarget && 'pf-m-source', - dragRef && 'pf-m-draggable' - ); - - return ( - - - {isTarget ? ( - <> - - - - ) : ( - - )} - - ); -}; - -export default ConnectorCross; diff --git a/packages/react-topology/src/components/edges/terminals/ConnectorSquare.tsx b/packages/react-topology/src/components/edges/terminals/ConnectorSquare.tsx deleted file mode 100644 index 8ce4be97b56..00000000000 --- a/packages/react-topology/src/components/edges/terminals/ConnectorSquare.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import * as React from 'react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import Point from '../../../geom/Point'; -import { ConnectDragSource } from '../../../behavior/dnd-types'; -import { getConnectorRotationAngle, getConnectorStartPoint } from './terminalUtils'; - -interface ConnectorSquareProps { - startPoint: Point; - endPoint: Point; - className?: string; - isTarget?: boolean; - size?: number; - dragRef?: ConnectDragSource; -} - -const ConnectorSquare: React.FunctionComponent = ({ - startPoint, - endPoint, - className = '', - isTarget = true, - size = 14, - dragRef -}) => { - if (!startPoint || !endPoint) { - return null; - } - - const connectorStartPoint = getConnectorStartPoint(startPoint, endPoint, size); - const angleDeg = getConnectorRotationAngle(startPoint, endPoint); - const classNames = css( - styles.topologyConnectorArrow, - styles.topologyConnectorSquare, - !isTarget && styles.modifiers.source, - className, - dragRef && 'pf-m-draggable' - ); - - return ( - - - - ); -}; - -export default ConnectorSquare; diff --git a/packages/react-topology/src/components/edges/terminals/DefaultConnectorTerminal.tsx b/packages/react-topology/src/components/edges/terminals/DefaultConnectorTerminal.tsx deleted file mode 100644 index ac7acb7e449..00000000000 --- a/packages/react-topology/src/components/edges/terminals/DefaultConnectorTerminal.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import * as _ from 'lodash'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { Edge, EdgeTerminalType, NodeStatus } from '../../../types'; -import { ConnectDragSource } from '../../../behavior/dnd-types'; -import ConnectorArrow from './ConnectorArrow'; -import ConnectorCross from './ConnectorCross'; -import ConnectorSquare from './ConnectorSquare'; -import ConnectorCircle from './ConnectorCircle'; -import ConnectorArrowAlt from './ConnectorArrowAlt'; -import { StatusModifier } from '../../../utils'; - -interface EdgeConnectorArrowProps { - edge: Edge; - className?: string; - highlight?: boolean; - isTarget?: boolean; - status?: NodeStatus; - terminalType?: EdgeTerminalType; - size?: number; - dragRef?: ConnectDragSource; -} - -const DefaultConnectorTerminal: React.FunctionComponent = ({ - className, - edge, - isTarget = true, - terminalType, - status, - ...others -}) => { - let Terminal; - switch (terminalType) { - case EdgeTerminalType.directional: - Terminal = ConnectorArrow; - break; - case EdgeTerminalType.directionalAlt: - Terminal = ConnectorArrowAlt; - break; - case EdgeTerminalType.cross: - Terminal = ConnectorCross; - break; - case EdgeTerminalType.square: - Terminal = ConnectorSquare; - break; - case EdgeTerminalType.circle: - Terminal = ConnectorCircle; - break; - default: - return null; - } - if (!Terminal) { - return null; - } - const bendPoints = edge.getBendpoints(); - const startPoint = isTarget ? _.last(bendPoints) || edge.getStartPoint() : _.head(bendPoints) || edge.getEndPoint(); - const endPoint = isTarget ? edge.getEndPoint() : edge.getStartPoint(); - const classes = css(styles.topologyEdge, className, StatusModifier[status]); - - return ; -}; - -export default observer(DefaultConnectorTerminal); diff --git a/packages/react-topology/src/components/edges/terminals/index.ts b/packages/react-topology/src/components/edges/terminals/index.ts deleted file mode 100644 index 0ea0319d728..00000000000 --- a/packages/react-topology/src/components/edges/terminals/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { default as ConnectorArrow } from './ConnectorArrow'; -export { default as ConnectorArrowAlt } from './ConnectorArrowAlt'; -export { default as ConnectorCircle } from './ConnectorCircle'; -export { default as ConnectorCross } from './ConnectorCross'; -export { default as ConnectorSquare } from './ConnectorSquare'; -export { default as DefaultConnectorTerminal } from './DefaultConnectorTerminal'; -export { default as EdgeConnectorArrow } from './DefaultConnectorTerminal'; // Backwards compatibility diff --git a/packages/react-topology/src/components/edges/terminals/terminalUtils.ts b/packages/react-topology/src/components/edges/terminals/terminalUtils.ts deleted file mode 100644 index 0846527d137..00000000000 --- a/packages/react-topology/src/components/edges/terminals/terminalUtils.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Point } from '../../../geom'; - -export const getConnectorStartPoint = (startPoint: Point, endPoint: Point, size: number): [number, number] => { - const length = Math.sqrt((endPoint.x - startPoint.x) ** 2 + (endPoint.y - startPoint.y) ** 2); - if (!length) { - return [0, 0]; - } - const ratio = (length - size) / length; - - return [startPoint.x + (endPoint.x - startPoint.x) * ratio, startPoint.y + (endPoint.y - startPoint.y) * ratio]; -}; - -export const getConnectorRotationAngle = (startPoint: Point, endPoint: Point): number => - 180 - (Math.atan2(endPoint.y - startPoint.y, startPoint.x - endPoint.x) * 180) / Math.PI; - -export const getConnectorBoundingBox = (startPoint: Point, endPoint: Point, size: number): [number, number][] => { - const length = Math.sqrt((endPoint.x - startPoint.x) ** 2 + (endPoint.y - startPoint.y) ** 2); - if (!length) { - return null; - } - - const padding = Math.max(size, 8); - const deltaY = padding / 2; - return [ - [0, -deltaY], - [padding, -deltaY], - [padding, deltaY], - [0, deltaY] - ]; -}; diff --git a/packages/react-topology/src/components/factories/RegisterComponentFactory.tsx b/packages/react-topology/src/components/factories/RegisterComponentFactory.tsx deleted file mode 100644 index e5f4535b05f..00000000000 --- a/packages/react-topology/src/components/factories/RegisterComponentFactory.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import * as React from 'react'; -import useComponentFactory from '../../hooks/useComponentFactory'; -import { ComponentFactory } from '../../types'; - -interface Props { - factory: ComponentFactory; -} - -const RegisterComponentFactory: React.FunctionComponent = ({ factory }) => { - useComponentFactory(factory); - return null; -}; - -export default RegisterComponentFactory; diff --git a/packages/react-topology/src/components/factories/RegisterElementFactory.tsx b/packages/react-topology/src/components/factories/RegisterElementFactory.tsx deleted file mode 100644 index aa95807a2b1..00000000000 --- a/packages/react-topology/src/components/factories/RegisterElementFactory.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import * as React from 'react'; -import useElementFactory from '../../hooks/useElementFactory'; -import { ElementFactory } from '../../types'; - -interface Props { - factory: ElementFactory; -} - -const RegisteElementFactory: React.FunctionComponent = ({ factory }) => { - useElementFactory(factory); - return null; -}; - -export default RegisteElementFactory; diff --git a/packages/react-topology/src/components/factories/RegisterLayoutFactory.tsx b/packages/react-topology/src/components/factories/RegisterLayoutFactory.tsx deleted file mode 100644 index 8f4043f473c..00000000000 --- a/packages/react-topology/src/components/factories/RegisterLayoutFactory.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import * as React from 'react'; -import useLayoutFactory from '../../hooks/useLayoutFactory'; -import { LayoutFactory } from '../../types'; - -interface Props { - factory: LayoutFactory; -} - -const RegisterLayoutFactory: React.FunctionComponent = ({ factory }) => { - useLayoutFactory(factory); - return null; -}; - -export default RegisterLayoutFactory; diff --git a/packages/react-topology/src/components/factories/components/componentUtils.ts b/packages/react-topology/src/components/factories/components/componentUtils.ts deleted file mode 100644 index 57d54551ecf..00000000000 --- a/packages/react-topology/src/components/factories/components/componentUtils.ts +++ /dev/null @@ -1,289 +0,0 @@ -import { action } from 'mobx'; -import { Edge, Graph, GraphElement, isEdge, Node } from '../../../types'; -import { - CREATE_CONNECTOR_DROP_TYPE, - CREATE_CONNECTOR_OPERATION, - DragObjectWithType, - DragOperationWithType, - DragSourceSpec, - DragSpecOperationType, - DropTargetMonitor, - DropTargetSpec, - Modifiers, - TargetType -} from '../../../behavior'; - -const MOVE_CONNECTOR_DROP_TYPE = '#moveConnector#'; - -const NODE_DRAG_TYPE = '#node#'; -const EDGE_DRAG_TYPE = '#edge#'; - -const MOVE_CONNECTOR_OPERATION = 'moveconnector'; -const REGROUP_OPERATION = 'regroup'; - -export interface GraphComponentProps { - element: Graph; -} - -export interface NodeComponentProps { - element: Node; -} - -export interface EdgeComponentProps { - element: Edge; -} - -/** - * type: the drag operation type - * edit: true if the operation performs an edit, used to dim invalid drop targets - * canDropOnNode: true if the drag object can be dropped on node, used to highlight valid drop nodes - */ -export type EditableDragOperationType = DragOperationWithType & { - edit?: boolean; - canDropOnNode?: (operationType: string, dragElement: GraphElement, node: Node) => boolean; -}; - -export interface DragNodeObject { - element: GraphElement; - allowRegroup: boolean; -} - -const canDropEdgeOnNode = (operation: string, element: GraphElement, node: Node): boolean => { - if (!isEdge(element)) { - return false; - } - const edge = element as Edge; - if (edge.getSource() === node) { - return false; - } - - if (edge.getTarget() === node) { - return true; - } - - return !node.getTargetEdges().find(e => e.getSource() === edge.getSource()); -}; - -const highlightNode = (monitor: DropTargetMonitor, element: Node): boolean => { - const operation = monitor.getOperation() as EditableDragOperationType; - if (!monitor.isDragging() || !operation) { - return false; - } - - if (operation.type === CREATE_CONNECTOR_OPERATION) { - return ( - monitor.getItem() !== element && - monitor.getItem().getParent() !== element && - !monitor - .getItem() - .getSourceEdges() - .find((e: Edge) => e.getTarget() === element) - ); - } - - return operation.canDropOnNode && operation.canDropOnNode(operation.type, monitor.getItem(), element); -}; - -const nodeDragSourceSpec = ( - type: string, - allowRegroup: boolean = true, - canEdit: boolean = false -): DragSourceSpec< - DragObjectWithType, - DragSpecOperationType, - Node, - { - dragging?: boolean; - regrouping?: boolean; - }, - NodeComponentProps & { canEdit?: boolean } -> => ({ - item: { type: NODE_DRAG_TYPE }, - operation: (monitor, props) => - (canEdit || props.canEdit) && allowRegroup - ? { - [Modifiers.SHIFT]: { type: REGROUP_OPERATION, edit: true } - } - : undefined, - canCancel: monitor => monitor.getOperation()?.type === REGROUP_OPERATION, - begin: (monitor, props): DragNodeObject => ({ - element: props.element, - allowRegroup: (canEdit || props.canEdit) && allowRegroup - }), - end: async (dropResult, monitor, props) => { - if (!monitor.isCancelled() && monitor.getOperation()?.type === REGROUP_OPERATION) { - if (monitor.didDrop() && dropResult && props && props.element.getParent() !== dropResult) { - const controller = props.element.getController(); - - // perform the update in an action so as not to render too soon - action(() => { - if (controller.getNodeById(props.element.getId())) { - dropResult.appendChild(props.element); - } - })(); - } else { - // cancel operation - return Promise.reject(); - } - } - return undefined; - }, - collect: monitor => ({ - dragging: monitor.isDragging(), - regrouping: monitor.getOperation()?.type === REGROUP_OPERATION - }) -}); - -const noRegroupDragSourceSpec: DragSourceSpec< - DragObjectWithType, - DragSpecOperationType, - Node, - { - dragging?: boolean; - }, - NodeComponentProps -> = { - item: { type: NODE_DRAG_TYPE }, - collect: monitor => ({ - dragging: monitor.isDragging() - }) -}; - -const nodesEdgeIsDragging = (monitor: any, props: NodeComponentProps) => { - if (!monitor.isDragging()) { - return false; - } - if (monitor.getOperation() === MOVE_CONNECTOR_OPERATION) { - return monitor.getItem().getSource() === props.element; - } - if (monitor.getOperation() === CREATE_CONNECTOR_OPERATION) { - return monitor.getItem() === props.element; - } - return false; -}; - -const nodeDropTargetSpec = ( - accept?: TargetType -): DropTargetSpec< - GraphElement, - any, - { canDrop: boolean; dropTarget: boolean; edgeDragging: boolean }, - NodeComponentProps -> => ({ - accept: accept || [EDGE_DRAG_TYPE, CREATE_CONNECTOR_DROP_TYPE], - canDrop: (item, monitor, props) => { - if (isEdge(item)) { - return canDropEdgeOnNode(monitor.getOperation()?.type, item as Edge, props.element); - } - if (item === props.element) { - return false; - } - return !props.element.getTargetEdges().find(e => e.getSource() === item); - }, - collect: (monitor, props) => ({ - canDrop: highlightNode(monitor, props.element), - dropTarget: monitor.isOver({ shallow: true }), - edgeDragging: nodesEdgeIsDragging(monitor, props) - }) -}); - -const graphDropTargetSpec = ( - accept?: TargetType -): DropTargetSpec => ({ - accept: accept || [NODE_DRAG_TYPE, EDGE_DRAG_TYPE, CREATE_CONNECTOR_DROP_TYPE], - hitTest: () => true, - canDrop: (item, monitor, props) => - monitor.isOver({ shallow: monitor.getItemType() === CREATE_CONNECTOR_DROP_TYPE }) && - ((monitor.getOperation()?.type === REGROUP_OPERATION && - // FIXME: the hasParent check is necessary due to model updates during async actions - item.element.hasParent() && - item.element.getParent() !== props.element) || - monitor.getItemType() === CREATE_CONNECTOR_DROP_TYPE), - collect: monitor => { - const operation = monitor.getOperation() as EditableDragOperationType; - const dragEditInProgress = - monitor.isDragging() && (operation?.type === CREATE_CONNECTOR_OPERATION || operation?.edit); - const dragCreate = - dragEditInProgress && - (monitor.getItemType() === CREATE_CONNECTOR_DROP_TYPE || monitor.getItemType() === MOVE_CONNECTOR_DROP_TYPE); - return { - dragEditInProgress, - dragCreate, - hasDropTarget: dragEditInProgress && monitor.hasDropTarget() - }; - }, - dropHint: 'create' -}); - -const groupDropTargetSpec: DropTargetSpec< - any, - any, - { droppable: boolean; dropTarget: boolean; canDrop: boolean }, - any -> = { - accept: [NODE_DRAG_TYPE, EDGE_DRAG_TYPE, CREATE_CONNECTOR_DROP_TYPE], - canDrop: (item, monitor) => - monitor.isOver({ shallow: monitor.getItemType() === CREATE_CONNECTOR_DROP_TYPE }) && - (monitor.getOperation()?.type === REGROUP_OPERATION || monitor.getItemType() === CREATE_CONNECTOR_DROP_TYPE), - collect: monitor => ({ - droppable: monitor.isDragging() && monitor.getOperation()?.type === REGROUP_OPERATION, - dropTarget: monitor.isOver({ shallow: monitor.getItemType() === CREATE_CONNECTOR_DROP_TYPE }), - canDrop: - monitor.isDragging() && - (monitor.getOperation()?.type === REGROUP_OPERATION || monitor.getItemType() === CREATE_CONNECTOR_DROP_TYPE), - dragRegroupable: monitor.isDragging() && monitor.getItem()?.allowRegroup - }), - dropHint: 'create' -}; - -const edgeDragSourceSpec = ( - type: string, - callback: (sourceNode: Node, targetNode: Node, replaceTargetNode?: Node) => void -): DragSourceSpec< - DragObjectWithType, - DragSpecOperationType, - Node, - { dragging: boolean }, - EdgeComponentProps -> => ({ - item: { type: EDGE_DRAG_TYPE }, - operation: { type: MOVE_CONNECTOR_OPERATION, edit: true, canDropOnNode: canDropEdgeOnNode }, - begin: (monitor, props) => { - props.element.raise(); - return props.element; - }, - drag: (event, monitor, props) => { - props.element.setEndPoint(event.x, event.y); - }, - end: (dropResult, monitor, props) => { - props.element.setEndPoint(); - if (monitor.didDrop() && dropResult && canDropEdgeOnNode(monitor.getOperation()?.type, props.element, dropResult)) { - callback(props.element.getSource(), dropResult, props.element.getTarget()); - } - }, - collect: monitor => ({ - dragging: monitor.isDragging() - }) -}); - -const noDropTargetSpec: DropTargetSpec = { - accept: [NODE_DRAG_TYPE, EDGE_DRAG_TYPE, CREATE_CONNECTOR_DROP_TYPE], - canDrop: () => false -}; - -export { - nodesEdgeIsDragging, - noRegroupDragSourceSpec, - nodeDragSourceSpec, - nodeDropTargetSpec, - graphDropTargetSpec, - groupDropTargetSpec, - edgeDragSourceSpec, - noDropTargetSpec, - REGROUP_OPERATION, - MOVE_CONNECTOR_DROP_TYPE, - NODE_DRAG_TYPE, - EDGE_DRAG_TYPE, - canDropEdgeOnNode, - highlightNode -}; diff --git a/packages/react-topology/src/components/factories/components/index.ts b/packages/react-topology/src/components/factories/components/index.ts deleted file mode 100644 index c92142b68bc..00000000000 --- a/packages/react-topology/src/components/factories/components/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './componentUtils'; diff --git a/packages/react-topology/src/components/factories/index.ts b/packages/react-topology/src/components/factories/index.ts deleted file mode 100644 index 34429b36729..00000000000 --- a/packages/react-topology/src/components/factories/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { default as RegisterComponentFactory } from './RegisterComponentFactory'; -export { default as RegisterElementFactory } from './RegisterElementFactory'; -export { default as RegisterLayoutFactory } from './RegisterLayoutFactory'; -export * from './components'; diff --git a/packages/react-topology/src/components/groups/CollapsedGroupAnchor.ts b/packages/react-topology/src/components/groups/CollapsedGroupAnchor.ts deleted file mode 100644 index a5cb6009ccc..00000000000 --- a/packages/react-topology/src/components/groups/CollapsedGroupAnchor.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Node } from '../../types'; -import { AbstractAnchor } from '../../anchors'; -import { Point } from '../../geom'; -import { getRectAnchorPoint } from '../../utils'; - -class CollapsedGroupAnchor extends AbstractAnchor { - protected readonly width: number; - - protected readonly height: number; - - constructor(owner: Node, width: number, height: number, offset: number = 0) { - super(owner, offset); - this.width = width; - this.height = height; - } - - getLocation(reference: Point): Point { - const center = new Point(this.owner.getPosition().x + this.width / 2, this.owner.getPosition().y + this.height / 2); - - const offset2x = this.offset * 2; - return getRectAnchorPoint(center, this.width + offset2x, this.height + offset2x, reference); - } -} - -export default CollapsedGroupAnchor; diff --git a/packages/react-topology/src/components/groups/DefaultGroup.tsx b/packages/react-topology/src/components/groups/DefaultGroup.tsx deleted file mode 100644 index efd0bf82504..00000000000 --- a/packages/react-topology/src/components/groups/DefaultGroup.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import DefaultGroupExpanded from './DefaultGroupExpanded'; -import { WithContextMenuProps, WithDndDropProps, WithSelectionProps, WithDragNodeProps } from '../../behavior'; -import { BadgeLocation, LabelPosition, Node } from '../../types'; -import DefaultGroupCollapsed from './DefaultGroupCollapsed'; -import { CollapsibleGroupProps } from './types'; - -type DefaultGroupProps = { - className?: string; - element: Node; - droppable?: boolean; - canDrop?: boolean; - dropTarget?: boolean; - dragging?: boolean; - dragRegroupable?: boolean; - hover?: boolean; - label?: string; // Defaults to element.getLabel() - secondaryLabel?: string; - showLabel?: boolean; // Defaults to true - labelPosition?: LabelPosition; // Defaults to bottom - truncateLength?: number; // Defaults to 13 - labelIconClass?: string; // Icon to show in label - labelIcon?: string; - labelIconPadding?: number; - badge?: string; - badgeColor?: string; - badgeTextColor?: string; - badgeBorderColor?: string; - badgeClassName?: string; - badgeLocation?: BadgeLocation; -} & Partial; - -const DefaultGroup: React.FunctionComponent = ({ - className, - element, - onCollapseChange, - ...rest -}) => { - const handleCollapse = (group: Node, collapsed: boolean): void => { - if (collapsed && rest.collapsedWidth !== undefined && rest.collapsedHeight !== undefined) { - group.setBounds(group.getBounds().setSize(rest.collapsedWidth, rest.collapsedHeight)); - } - group.setCollapsed(collapsed); - onCollapseChange && onCollapseChange(group, collapsed); - }; - - if (element.isCollapsed()) { - return ( - - ); - } - return ; -}; - -export default observer(DefaultGroup); diff --git a/packages/react-topology/src/components/groups/DefaultGroupCollapsed.tsx b/packages/react-topology/src/components/groups/DefaultGroupCollapsed.tsx deleted file mode 100644 index 00b3ead3196..00000000000 --- a/packages/react-topology/src/components/groups/DefaultGroupCollapsed.tsx +++ /dev/null @@ -1,185 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import ExpandIcon from '@patternfly/react-icons/dist/esm/icons/expand-alt-icon'; -import { Layer } from '../layers'; -import { GROUPS_LAYER } from '../../const'; -import { createSvgIdUrl, useCombineRefs, useHover, useSize } from '../../utils'; -import { BadgeLocation, LabelPosition, Node } from '../../types'; -import { - useDragNode, - WithContextMenuProps, - WithDndDropProps, - WithDragNodeProps, - WithSelectionProps -} from '../../behavior'; -import { Ellipse } from '../nodes/shapes'; -import NodeLabel from '../nodes/labels/NodeLabel'; -import { NODE_SHADOW_FILTER_ID_HOVER } from '../nodes/NodeShadows'; -import LabelBadge from '../nodes/labels/LabelBadge'; -import { CollapsibleGroupProps } from './types'; - -type DefaultGroupCollapsedProps = { - children?: React.ReactNode; - className?: string; - element: Node; - droppable?: boolean; - canDrop?: boolean; - dropTarget?: boolean; - dragging?: boolean; - hover?: boolean; - label?: string; // Defaults to element.getLabel() - secondaryLabel?: string; - showLabel?: boolean; // Defaults to true - labelPosition?: LabelPosition; // Defaults to bottom - truncateLength?: number; // Defaults to 13 - labelIconClass?: string; // Icon to show in label - labelIcon?: string; - labelIconPadding?: number; - badge?: string; - badgeColor?: string; - badgeTextColor?: string; - badgeBorderColor?: string; - badgeClassName?: string; - badgeLocation?: BadgeLocation; -} & Partial; - -const DefaultGroupCollapsed: React.FunctionComponent = ({ - className, - element, - collapsible, - selected, - onSelect, - children, - hover, - label, - secondaryLabel, - showLabel = true, - truncateLength, - collapsedWidth, - collapsedHeight, - getCollapsedShape, - onCollapseChange, - collapsedShadowOffset = 8, - dndDropRef, - dragNodeRef, - canDrop, - dropTarget, - onContextMenu, - contextMenuOpen, - dragging, - labelPosition, - badge, - badgeColor, - badgeTextColor, - badgeBorderColor, - badgeClassName, - badgeLocation, - labelIconClass, - labelIcon, - labelIconPadding -}) => { - const [hovered, hoverRef] = useHover(); - const [labelHover, labelHoverRef] = useHover(); - const dragLabelRef = useDragNode()[1]; - const [shapeSize, shapeRef] = useSize([collapsedWidth, collapsedHeight]); - const refs = useCombineRefs(hoverRef, dragNodeRef, shapeRef); - const isHover = hover !== undefined ? hover : hovered; - const childCount = element.getAllNodeChildren().length; - const [badgeSize, badgeRef] = useSize([childCount]); - - const groupClassName = css( - styles.topologyGroup, - className, - canDrop && 'pf-m-highlight', - canDrop && dropTarget && 'pf-m-drop-target', - dragging && 'pf-m-dragging', - selected && 'pf-m-selected' - ); - - const ShapeComponent = getCollapsedShape ? getCollapsedShape(element) : Ellipse; - const filter = isHover || dragging || dropTarget ? createSvgIdUrl(NODE_SHADOW_FILTER_ID_HOVER) : undefined; - - return ( - - - - {ShapeComponent && ( - <> - - - - - - - - - )} - - - {shapeSize && childCount && ( - - )} - {showLabel && ( - : undefined} - onActionIconClick={() => onCollapseChange(element, false)} - > - {label || element.getLabel()} - - )} - {children} - - ); -}; - -export default observer(DefaultGroupCollapsed); diff --git a/packages/react-topology/src/components/groups/DefaultGroupExpanded.tsx b/packages/react-topology/src/components/groups/DefaultGroupExpanded.tsx deleted file mode 100644 index 668acf8da9a..00000000000 --- a/packages/react-topology/src/components/groups/DefaultGroupExpanded.tsx +++ /dev/null @@ -1,216 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import { polygonHull } from 'd3-polygon'; -import * as _ from 'lodash'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import CollapseIcon from '@patternfly/react-icons/dist/esm/icons/compress-alt-icon'; -import NodeLabel from '../nodes/labels/NodeLabel'; -import { Layer } from '../layers'; -import { GROUPS_LAYER } from '../../const'; -import { hullPath, maxPadding, useCombineRefs, useHover } from '../../utils'; -import { BadgeLocation, isGraph, Node, NodeShape, NodeStyle, PointTuple } from '../../types'; -import { - useDragNode, - useSvgAnchor, - WithContextMenuProps, - WithDndDropProps, - WithDragNodeProps, - WithSelectionProps -} from '../../behavior'; -import { CollapsibleGroupProps } from './types'; - -type DefaultGroupExpandedProps = { - className?: string; - element: Node; - droppable?: boolean; - canDrop?: boolean; - dropTarget?: boolean; - dragging?: boolean; - hover?: boolean; - label?: string; // Defaults to element.getLabel() - secondaryLabel?: string; - showLabel?: boolean; // Defaults to true - truncateLength?: number; // Defaults to 13 - badge?: string; - badgeColor?: string; - badgeTextColor?: string; - badgeBorderColor?: string; - badgeClassName?: string; - badgeLocation?: BadgeLocation; - labelIconClass?: string; // Icon to show in label - labelIcon?: string; - labelIconPadding?: number; -} & Partial; - -type PointWithSize = [number, number, number]; - -// Return the point whose Y is the largest value. -// If multiple points are found, compute the center X between them -// export for testing only -export function computeLabelLocation(points: PointWithSize[]): PointWithSize { - let lowPoints: PointWithSize[]; - const threshold = 5; - - _.forEach(points, p => { - const delta = !lowPoints ? Infinity : Math.round(p[1]) - Math.round(lowPoints[0][1]); - if (delta > threshold) { - lowPoints = [p]; - } else if (Math.abs(delta) <= threshold) { - lowPoints.push(p); - } - }); - return [ - (_.minBy(lowPoints, p => p[0])[0] + _.maxBy(lowPoints, p => p[0])[0]) / 2, - lowPoints[0][1], - // use the max size value - _.maxBy(lowPoints, p => p[2])[2] - ]; -} - -const DefaultGroupExpanded: React.FunctionComponent = ({ - className, - element, - collapsible, - selected, - onSelect, - hover, - label, - secondaryLabel, - showLabel = true, - truncateLength, - dndDropRef, - droppable, - canDrop, - dropTarget, - onContextMenu, - contextMenuOpen, - dragging, - dragNodeRef, - badge, - badgeColor, - badgeTextColor, - badgeBorderColor, - badgeClassName, - badgeLocation, - labelIconClass, - labelIcon, - labelIconPadding, - onCollapseChange -}) => { - const [hovered, hoverRef] = useHover(); - const [labelHover, labelHoverRef] = useHover(); - const dragLabelRef = useDragNode()[1]; - const refs = useCombineRefs(hoverRef, dragNodeRef); - const isHover = hover !== undefined ? hover : hovered; - const anchorRef = useSvgAnchor(); - const outlineRef = useCombineRefs(dndDropRef, anchorRef); - const labelLocation = React.useRef(); - const pathRef = React.useRef(); - - let parent = element.getParent(); - let altGroup = false; - while (!isGraph(parent)) { - altGroup = !altGroup; - parent = parent.getParent(); - } - - // cast to number and coerce - const padding = maxPadding(element.getStyle().padding ?? 17); - const hullPadding = (point: PointWithSize | PointTuple) => (point[2] || 0) + padding; - - if (!droppable || !pathRef.current || !labelLocation.current) { - const children = element.getNodes().filter(c => c.isVisible()); - if (children.length === 0) { - return null; - } - const points: (PointWithSize | PointTuple)[] = []; - _.forEach(children, c => { - if (c.getNodeShape() === NodeShape.circle) { - const bounds = c.getBounds(); - const { width, height } = bounds; - const { x, y } = bounds.getCenter(); - const radius = Math.max(width, height) / 2; - points.push([x, y, radius] as PointWithSize); - } else { - // add all 4 corners - const { width, height, x, y } = c.getBounds(); - points.push([x, y, 0] as PointWithSize); - points.push([x + width, y, 0] as PointWithSize); - points.push([x, y + height, 0] as PointWithSize); - points.push([x + width, y + height, 0] as PointWithSize); - } - }); - const hullPoints: (PointWithSize | PointTuple)[] = - points.length > 2 ? polygonHull(points as PointTuple[]) : (points as PointTuple[]); - if (!hullPoints) { - return null; - } - - // change the box only when not dragging - pathRef.current = hullPath(hullPoints as PointTuple[], hullPadding); - - // Compute the location of the group label. - labelLocation.current = computeLabelLocation(hullPoints as PointWithSize[]); - } - - const groupClassName = css( - styles.topologyGroup, - className, - altGroup && 'pf-m-alt-group', - canDrop && 'pf-m-highlight', - dragging && 'pf-m-dragging', - selected && 'pf-m-selected' - ); - const innerGroupClassName = css( - styles.topologyGroup, - className, - altGroup && 'pf-m-alt-group', - canDrop && 'pf-m-highlight', - dragging && 'pf-m-dragging', - selected && 'pf-m-selected', - (isHover || labelHover) && 'pf-m-hover', - canDrop && dropTarget && 'pf-m-drop-target' - ); - - return ( - - - - - - - {showLabel && (label || element.getLabel()) && ( - : undefined} - onActionIconClick={() => onCollapseChange(element, true)} - > - {label || element.getLabel()} - - )} - - ); -}; - -export default observer(DefaultGroupExpanded); diff --git a/packages/react-topology/src/components/groups/index.ts b/packages/react-topology/src/components/groups/index.ts deleted file mode 100644 index dd08fa6ffef..00000000000 --- a/packages/react-topology/src/components/groups/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './types'; -export { default as DefaultGroup } from './DefaultGroup'; diff --git a/packages/react-topology/src/components/groups/types.ts b/packages/react-topology/src/components/groups/types.ts deleted file mode 100644 index ed088eb39c4..00000000000 --- a/packages/react-topology/src/components/groups/types.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Node } from '../../types'; -import * as React from 'react'; -import { ShapeProps } from '../nodes'; - -export interface CollapsibleGroupProps { - collapsible?: boolean; - collapsedWidth?: number; - collapsedHeight?: number; - onCollapseChange?: (group: Node, collapsed: boolean) => void; - getCollapsedShape?: (node: Node) => React.FunctionComponent; - collapsedShadowOffset?: number; // defaults to 10 -} diff --git a/packages/react-topology/src/components/index.ts b/packages/react-topology/src/components/index.ts deleted file mode 100644 index b2b017b64b2..00000000000 --- a/packages/react-topology/src/components/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -export * from './TopologyView'; -export * from './TopologyControlBar'; -export * from './TopologySideBar'; -export { default as VisualizationProvider } from './VisualizationProvider'; -export { default as VisualizationSurface } from './VisualizationSurface'; -export { default as DefaultCreateConnector } from './DefaultCreateConnector'; -export { default as DefaultRemoveConnector } from './DefaultRemoveConnector'; -export { default as GraphComponent } from './GraphComponent'; -export { default as SVGArrowMarker } from './SVGArrowMarker'; -export { default as ElementWrapper } from './ElementWrapper'; -export * from './contextmenu'; -export * from './decorators'; -export * from './groups'; -export * from './nodes'; -export * from './edges'; -export * from './factories'; -export * from './layers'; -export * from './defs'; diff --git a/packages/react-topology/src/components/layers/Layer.tsx b/packages/react-topology/src/components/layers/Layer.tsx deleted file mode 100644 index 810f9840bb1..00000000000 --- a/packages/react-topology/src/components/layers/Layer.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import { createPortal } from 'react-dom'; -import ElementContext from '../../utils/ElementContext'; -import LayersContext from './LayersContext'; -import LayerContainer from './LayerContainer'; - -interface LayerProps { - id?: string; - children: React.ReactNode; - orderKey?: number; -} - -interface LayerDelegateProps { - id: string; - children: React.ReactNode; - orderKey?: number; -} - -const ORDER_KEY = '__order__'; - -const compare = (a: ChildNode, b: ChildNode): number => { - if (a === b) { - return 0; - } - const ao = a[ORDER_KEY]; - const bo = b[ORDER_KEY]; - - if (ao == null || bo == null) { - return 0; - } - - for (let i = 0; i < ao.length; i++) { - if (ao[i] !== bo[i]) { - return ao[i] - bo[i]; - } - } - return ao.length === bo.length ? 0 : ao.length - bo.length; -}; - -const LayerDelegate: React.FunctionComponent = observer(({ id, children, orderKey }) => { - const getLayerNode = React.useContext(LayersContext); - const layerNode = getLayerNode(id); - - const element = React.useContext(ElementContext); - const nodeRef = React.useRef(null); - let order: unknown; - if (id && orderKey == null) { - order = element.getOrderKey(); - } else if (id) { - order = orderKey; - } - - React.useEffect(() => { - // TODO use bisection search - if (nodeRef.current && layerNode != null) { - nodeRef.current[ORDER_KEY] = order; - const { childNodes } = layerNode; - // childNodes is not an array, disable false positive - // eslint-disable-next-line @typescript-eslint/prefer-for-of - for (let i = 0; i < childNodes.length; i++) { - const result = compare(nodeRef.current, childNodes[i]); - if (result < 0) { - if (i > 0 && childNodes[i - 1] !== nodeRef.current) { - layerNode.insertBefore(nodeRef.current, childNodes[i]); - } - return; - } - } - if (childNodes[childNodes.length - 1] !== nodeRef.current) { - layerNode.appendChild(nodeRef.current); - } - } - }, [order, layerNode]); - - return createPortal({children}, layerNode); -}); - -const Layer: React.FunctionComponent = ({ id, children, orderKey }) => - id ? ( - - {children} - - ) : ( - <>{children} - ); - -export default Layer; diff --git a/packages/react-topology/src/components/layers/LayerContainer.tsx b/packages/react-topology/src/components/layers/LayerContainer.tsx deleted file mode 100644 index 19399e4959d..00000000000 --- a/packages/react-topology/src/components/layers/LayerContainer.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import ElementContext from '../../utils/ElementContext'; -import { isNode } from '../../types'; -import { ATTR_DATA_ID, ATTR_DATA_KIND, ATTR_DATA_TYPE } from '../../const'; - -interface LayerContainerProps { - children: React.ReactNode; -} - -const LayerContainer: React.ForwardRefRenderFunction = ({ children }, ref) => { - // accumulate parent positions - const element = React.useContext(ElementContext); - let p = element; - let x = 0; - let y = 0; - while (isNode(p)) { - if (!p.isGroup() || p.isCollapsed()) { - const { x: px, y: py } = p.getPosition(); - x += px; - y += py; - } - p = p.getParent(); - } - const commonAttrs = { - [ATTR_DATA_ID]: element.getId(), - [ATTR_DATA_KIND]: element.getKind(), - [ATTR_DATA_TYPE]: element.getType() - }; - return ( - - {children} - - ); -}; - -export default observer(React.forwardRef(LayerContainer)); diff --git a/packages/react-topology/src/components/layers/LayersContext.ts b/packages/react-topology/src/components/layers/LayersContext.ts deleted file mode 100644 index 9013305239c..00000000000 --- a/packages/react-topology/src/components/layers/LayersContext.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createContext } from 'react'; - -type LayersContextProps = (id: string) => Element; - -const LayersContext = createContext(undefined as any); - -export default LayersContext; diff --git a/packages/react-topology/src/components/layers/LayersProvider.tsx b/packages/react-topology/src/components/layers/LayersProvider.tsx deleted file mode 100644 index 8d79e57491e..00000000000 --- a/packages/react-topology/src/components/layers/LayersProvider.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import * as React from 'react'; -import { DEFAULT_LAYER } from '../../const'; -import LayersContext from './LayersContext'; - -interface LayersProviderProps { - layers?: string[]; - children?: React.ReactNode; -} - -interface State { - [id: string]: Element; -} - -export default class LayersProvider extends React.Component { - constructor(props: LayersProviderProps) { - super(props); - this.state = {}; - } - - private contextValue = (id: string): Element => { - if (this.state[id]) { - return this.state[id]; - } - throw new Error(`Unknown layer '${id}'`); - }; - - private setDomLayers = (node: SVGGElement | null, id: string) => { - if (node && this.state[id] !== node) { - this.setState(state => ({ ...state, [id]: node })); - } - }; - - getLayerNode = (id: string): Element => { - const node = this.state[id]; - if (node) { - return node; - } - throw new Error(`Unknown layer '${id}'`); - }; - - render() { - const { layers, children } = this.props; - if (layers && !layers.includes(DEFAULT_LAYER)) { - throw new Error('Missing default layer.'); - } - const layerIds = layers || [DEFAULT_LAYER]; - return ( - - {layerIds.map(id => ( - this.setDomLayers(r, id)}> - {id === DEFAULT_LAYER && this.state[id] ? children : undefined} - - ))} - - ); - } -} diff --git a/packages/react-topology/src/components/layers/index.ts b/packages/react-topology/src/components/layers/index.ts deleted file mode 100644 index 9311498cc21..00000000000 --- a/packages/react-topology/src/components/layers/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as Layer } from './Layer'; -export { default as LayersProvider } from './LayersProvider'; diff --git a/packages/react-topology/src/components/nodes/DefaultNode.tsx b/packages/react-topology/src/components/nodes/DefaultNode.tsx deleted file mode 100644 index 4175f0906b9..00000000000 --- a/packages/react-topology/src/components/nodes/DefaultNode.tsx +++ /dev/null @@ -1,319 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import { css } from '@patternfly/react-styles'; -import { Tooltip, TooltipPosition } from '@patternfly/react-core'; -import CheckCircleIcon from '@patternfly/react-icons/dist/esm/icons/check-circle-icon'; -import ExclamationCircleIcon from '@patternfly/react-icons/dist/esm/icons/exclamation-circle-icon'; -import ExclamationTriangleIcon from '@patternfly/react-icons/dist/esm/icons/exclamation-triangle-icon'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { BadgeLocation, GraphElement, LabelPosition, Node, NodeStatus, TopologyQuadrant } from '../../types'; -import { - WithContextMenuProps, - WithCreateConnectorProps, - WithDndDragProps, - WithDndDropProps, - WithDragNodeProps, - WithSelectionProps -} from '../../behavior'; -import Decorator from '../decorators/Decorator'; -import { createSvgIdUrl, StatusModifier, useCombineRefs, useHover } from '../../utils'; -import NodeLabel from './labels/NodeLabel'; -import NodeShadows, { NODE_SHADOW_FILTER_ID_DANGER, NODE_SHADOW_FILTER_ID_HOVER } from './NodeShadows'; -import { DEFAULT_DECORATOR_RADIUS, getDefaultShapeDecoratorCenter, getShapeComponent, ShapeProps } from './shapes'; - -const StatusQuadrant = TopologyQuadrant.upperLeft; - -const getStatusIcon = (status: NodeStatus) => { - switch (status) { - case NodeStatus.danger: - return ; - case NodeStatus.warning: - return ; - case NodeStatus.success: - return ; - default: - return null; - } -}; - -type DefaultNodeProps = { - children?: React.ReactNode; - className?: string; - element: Node; - droppable?: boolean; - hover?: boolean; - canDrop?: boolean; - dragging?: boolean; - edgeDragging?: boolean; - dropTarget?: boolean; - scaleNode?: boolean; // Whether or not to scale the node, best on hover of node at lowest scale level - label?: string; // Defaults to element.getLabel() - secondaryLabel?: string; - showLabel?: boolean; // Defaults to true - labelClassName?: string; - scaleLabel?: boolean; // Whether or not to scale the label, best at lower scale levels - labelPosition?: LabelPosition; // Defaults to element.getLabelPosition() - truncateLength?: number; // Defaults to 13 - labelIconClass?: string; // Icon to show in label - labelIcon?: React.ReactNode; - labelIconPadding?: number; - badge?: string; - badgeColor?: string; - badgeTextColor?: string; - badgeBorderColor?: string; - badgeClassName?: string; - badgeLocation?: BadgeLocation; - attachments?: React.ReactNode; // ie. decorators - nodeStatus?: NodeStatus; // Defaults to element.getNodeStatus() - showStatusBackground?: boolean; - showStatusDecorator?: boolean; - statusDecoratorTooltip?: React.ReactNode; - onStatusDecoratorClick?: (event: React.MouseEvent, element: GraphElement) => void; - getCustomShape?: (node: Node) => React.FunctionComponent; - getShapeDecoratorCenter?: (quadrant: TopologyQuadrant, node: Node) => { x: number; y: number }; -} & Partial< - WithSelectionProps & - WithDragNodeProps & - WithDndDragProps & - WithDndDropProps & - WithCreateConnectorProps & - WithContextMenuProps ->; - -const SCALE_UP_TIME = 200; - -const DefaultNode: React.FunctionComponent = ({ - className, - element, - selected, - hover, - scaleNode, - showLabel = true, - label, - secondaryLabel, - labelClassName, - labelPosition, - scaleLabel, - truncateLength, - labelIconClass, - labelIcon, - labelIconPadding, - nodeStatus, - showStatusBackground, - showStatusDecorator = false, - statusDecoratorTooltip, - getCustomShape, - getShapeDecoratorCenter, - onStatusDecoratorClick, - badge, - badgeColor, - badgeTextColor, - badgeBorderColor, - badgeClassName, - badgeLocation, - onSelect, - children, - attachments, - dragNodeRef, - dragging, - edgeDragging, - canDrop, - dropTarget, - dndDropRef, - onHideCreateConnector, - onShowCreateConnector, - onContextMenu, - contextMenuOpen -}) => { - const [hovered, hoverRef] = useHover(); - const status = nodeStatus || element.getNodeStatus(); - const refs = useCombineRefs(hoverRef, dragNodeRef); - const { width, height } = element.getDimensions(); - const isHover = hover !== undefined ? hover : hovered; - const [nodeScale, setNodeScale] = React.useState(1); - - const statusDecorator = React.useMemo(() => { - if (!status || !showStatusDecorator) { - return null; - } - - const icon = getStatusIcon(status); - if (!icon) { - return null; - } - - const { x, y } = getShapeDecoratorCenter - ? getShapeDecoratorCenter(StatusQuadrant, element) - : getDefaultShapeDecoratorCenter(StatusQuadrant, element); - - const decorator = ( - onStatusDecoratorClick(e, element)} - icon={{icon}} - /> - ); - - if (statusDecoratorTooltip) { - return ( - - {decorator} - - ); - } - - return decorator; - }, [showStatusDecorator, status, getShapeDecoratorCenter, element, statusDecoratorTooltip, onStatusDecoratorClick]); - - React.useEffect(() => { - if (isHover) { - onShowCreateConnector && onShowCreateConnector(); - } else { - onHideCreateConnector && onHideCreateConnector(); - } - }, [isHover, onShowCreateConnector, onHideCreateConnector]); - - const ShapeComponent = (getCustomShape && getCustomShape(element)) || getShapeComponent(element); - - const groupClassName = css( - styles.topologyNode, - className, - isHover && 'pf-m-hover', - (dragging || edgeDragging) && 'pf-m-dragging', - canDrop && 'pf-m-highlight', - canDrop && dropTarget && 'pf-m-drop-target', - selected && 'pf-m-selected', - StatusModifier[status] - ); - - const backgroundClassName = css( - styles.topologyNodeBackground, - showStatusBackground && StatusModifier[status], - showStatusBackground && selected && 'pf-m-selected' - ); - - let filter; - if (status === 'danger') { - filter = createSvgIdUrl(NODE_SHADOW_FILTER_ID_DANGER); - } else if (isHover || dragging || edgeDragging || dropTarget) { - filter = createSvgIdUrl(NODE_SHADOW_FILTER_ID_HOVER); - } - - const nodeLabelPosition = labelPosition || element.getLabelPosition(); - const scale = element.getGraph().getScale(); - - const animationRef = React.useRef(); - const scaleGoal = React.useRef(1); - const nodeScaled = React.useRef(false); - - React.useEffect(() => { - if (!scaleNode || scale >= 1) { - setNodeScale(1); - nodeScaled.current = false; - if (animationRef.current) { - window.cancelAnimationFrame(animationRef.current); - animationRef.current = 0; - } - } else { - scaleGoal.current = 1 / scale; - const scaleDelta = scaleGoal.current - scale; - const initTime = performance.now(); - - const bumpScale = (bumpTime: number) => { - const scalePercent = (bumpTime - initTime) / SCALE_UP_TIME; - const nextScale = Math.min(scale + scaleDelta * scalePercent, scaleGoal.current); - setNodeScale(nextScale); - if (nextScale < scaleGoal.current) { - animationRef.current = window.requestAnimationFrame(bumpScale); - } else { - nodeScaled.current = true; - animationRef.current = 0; - } - }; - - if (nodeScaled.current) { - setNodeScale(scaleGoal.current); - } else if (!animationRef.current) { - animationRef.current = window.requestAnimationFrame(bumpScale); - } - } - return () => { - if (animationRef.current) { - window.cancelAnimationFrame(animationRef.current); - animationRef.current = 0; - } - }; - }, [scale, scaleNode]); - - const labelScale = scaleLabel && !scaleNode ? Math.max(1, 1 / scale) : 1; - const labelPositionScale = scaleLabel && !scaleNode ? Math.min(1, scale) : 1; - - const { translateX, translateY } = React.useMemo(() => { - if (!scaleNode) { - return { translateX: 0, translateY: 0 }; - } - const bounds = element.getBounds(); - const translateX = bounds.width / 2 - (bounds.width / 2) * nodeScale; - const translateY = bounds.height / 2 - (bounds.height / 2) * nodeScale; - - return { translateX, translateY }; - }, [element, nodeScale, scaleNode]); - - return ( - - - - {ShapeComponent && ( - - )} - {showLabel && (label || element.getLabel()) && ( - - - {label || element.getLabel()} - - - )} - {children} - - {statusDecorator} - {attachments} - - ); -}; - -export default observer(DefaultNode); diff --git a/packages/react-topology/src/components/nodes/NodeShadows.tsx b/packages/react-topology/src/components/nodes/NodeShadows.tsx deleted file mode 100644 index b0b0f7cfb14..00000000000 --- a/packages/react-topology/src/components/nodes/NodeShadows.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import * as React from 'react'; -import SvgDropShadowFilter from '../svg/SvgDropShadowFilter'; - -export const NODE_SHADOW_FILTER_ID = 'NodeShadowsFilterId'; -export const NODE_SHADOW_FILTER_ID_HOVER = 'NodeShadowsFilterId--hover'; -export const NODE_SHADOW_FILTER_ID_DANGER = 'NodeShadowsFilterId--danger'; - -const NodeShadows: React.FunctionComponent = () => ( - <> - - - - -); - -export default NodeShadows; diff --git a/packages/react-topology/src/components/nodes/index.ts b/packages/react-topology/src/components/nodes/index.ts deleted file mode 100644 index 3b4b66672ca..00000000000 --- a/packages/react-topology/src/components/nodes/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { default as DefaultNode } from './DefaultNode'; -export { default as NodeShadows } from './NodeShadows'; -export * from './shapes'; -export * from './labels'; diff --git a/packages/react-topology/src/components/nodes/labels/LabelActionIcon.tsx b/packages/react-topology/src/components/nodes/labels/LabelActionIcon.tsx deleted file mode 100644 index 6abd72a40a6..00000000000 --- a/packages/react-topology/src/components/nodes/labels/LabelActionIcon.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import * as React from 'react'; -import { useSize } from '../../../utils'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; - -interface LabelActionIconProps { - className?: string; - icon: React.ReactElement; - onClick: (e: React.MouseEvent) => void; - iconOffsetX?: number; - iconOffsetY?: number; - x: number; - y: number; - height: number; - paddingX: number; - paddingY: number; -} - -const LabelActionIcon = React.forwardRef( - ({ icon, onClick, className, x, y, paddingX, height, iconOffsetX = 0, iconOffsetY = 0 }, actionRef) => { - const [iconSize, iconRef] = useSize([icon, paddingX]); - const iconWidth = iconSize?.width ?? 0; - const iconHeight = iconSize?.height ?? 0; - const iconY = (height - iconHeight) / 2; - - const classes = css(styles.topologyNodeActionIcon, className); - - const handleClick = (e: React.MouseEvent) => { - if (onClick) { - e.stopPropagation(); - onClick(e); - } - }; - - return ( - - {iconSize && ( - - )} - - {icon} - - - ); - } -); - -export default LabelActionIcon; diff --git a/packages/react-topology/src/components/nodes/labels/LabelBadge.tsx b/packages/react-topology/src/components/nodes/labels/LabelBadge.tsx deleted file mode 100644 index 0f6629f4e8c..00000000000 --- a/packages/react-topology/src/components/nodes/labels/LabelBadge.tsx +++ /dev/null @@ -1,71 +0,0 @@ -/* eslint patternfly-react/import-tokens-icons: 0 */ -import * as React from 'react'; -import { css } from '@patternfly/react-styles'; -import { global_palette_blue_50 as defaultBadgeFill } from '@patternfly/react-tokens/dist/js/global_palette_blue_50'; -import { global_palette_blue_300 as defaultBadgeBorder } from '@patternfly/react-tokens/dist/js/global_palette_blue_300'; -import { global_palette_blue_300 as defaultBadgeTextColor } from '@patternfly/react-tokens/dist/js/global_palette_blue_300'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { useSize } from '../../../utils'; -import { BadgeLocation } from '../../../types'; - -interface LabelBadgeProps { - className?: string; - x: number; - y: number; - badge?: string; - badgeColor?: string; - badgeTextColor?: string; - badgeBorderColor?: string; - badgeClassName?: string; - badgeLocation?: BadgeLocation; -} - -const LabelBadge = React.forwardRef( - ({ badge, badgeTextColor, badgeColor, badgeBorderColor, badgeClassName, className, x, y }, iconRef) => { - const [textSize, textRef] = useSize([]); - const classes = css(styles.topologyNodeLabelBadge, badgeClassName && badgeClassName, className && className); - - let rect = null; - let paddingX = 0; - let paddingY = 0; - let width = 0; - let height = 0; - - if (textSize) { - ({ height, width } = textSize); - paddingX = height / 2; - paddingY = height / 14; - height += paddingY * 2; - rect = ( - - ); - } - return ( - - {rect} - - {badge} - - - ); - } -); - -export default LabelBadge; diff --git a/packages/react-topology/src/components/nodes/labels/LabelContextMenu.tsx b/packages/react-topology/src/components/nodes/labels/LabelContextMenu.tsx deleted file mode 100644 index 660d0670bd6..00000000000 --- a/packages/react-topology/src/components/nodes/labels/LabelContextMenu.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import * as React from 'react'; -import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon'; -import { WithContextMenuProps } from '../../../behavior'; -import LabelActionIcon from './LabelActionIcon'; - -type LabelContextMenuProps = { - className?: string; - x: number; - y: number; - height: number; - paddingX: number; - paddingY: number; -} & WithContextMenuProps; - -const LabelContextMenu = React.forwardRef( - ({ onContextMenu, className, x, y, paddingX, paddingY, height }, menuRef) => ( - } - iconOffsetX={-6} - className={className} - onClick={onContextMenu} - x={x} - y={y} - height={height} - paddingX={paddingX} - paddingY={paddingY} - /> - ) -); - -export default LabelContextMenu; diff --git a/packages/react-topology/src/components/nodes/labels/LabelIcon.tsx b/packages/react-topology/src/components/nodes/labels/LabelIcon.tsx deleted file mode 100644 index 947b4fa7383..00000000000 --- a/packages/react-topology/src/components/nodes/labels/LabelIcon.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import * as React from 'react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; - -interface LabelIconProps { - className?: string; - x: number; - y: number; - width: number; - height: number; - padding?: number; - iconClass?: string; - icon?: React.ReactNode; -} - -const LabelIcon = React.forwardRef( - ({ className, x, y, width, height, iconClass, icon, padding = 4 }, circleRef) => { - const radius = width / 2; - const cx = x - radius; - const cy = y + height / 2; - const innerX = x - width + padding + 1; - const innerY = y + padding + 1; - const innerWidth = width - padding * 2 - 2; // -2 for 1px border on each side - const innerHeight = height - padding * 2 - 2; // -2 for 1px border on each side - - return ( - - - {icon ? ( - - {icon} - - ) : ( - - )} - - ); - } -); - -export default LabelIcon; diff --git a/packages/react-topology/src/components/nodes/labels/NodeLabel.tsx b/packages/react-topology/src/components/nodes/labels/NodeLabel.tsx deleted file mode 100644 index 62d487cca3d..00000000000 --- a/packages/react-topology/src/components/nodes/labels/NodeLabel.tsx +++ /dev/null @@ -1,299 +0,0 @@ -import * as React from 'react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { truncateMiddle } from '../../../utils/truncate-middle'; -import { createSvgIdUrl, useCombineRefs, useHover, useSize } from '../../../utils'; -import { WithContextMenuProps, WithDndDragProps } from '../../../behavior'; -import NodeShadows, { NODE_SHADOW_FILTER_ID_DANGER, NODE_SHADOW_FILTER_ID_HOVER } from '../NodeShadows'; -import LabelBadge from './LabelBadge'; -import LabelContextMenu from './LabelContextMenu'; -import LabelIcon from './LabelIcon'; -import LabelActionIcon from './LabelActionIcon'; -import { BadgeLocation, LabelPosition, NodeStatus } from '../../../types'; - -type NodeLabelProps = { - children?: string; - className?: string; - paddingX?: number; - paddingY?: number; - x?: number; - y?: number; - position?: LabelPosition; - cornerRadius?: number; - status?: NodeStatus; - secondaryLabel?: string; - truncateLength?: number; // Defaults to 13 - labelIconClass?: string; // Icon to show in label - labelIcon?: React.ReactNode; - labelIconPadding?: number; - dragRef?: WithDndDragProps['dndDragRef']; - hover?: boolean; - dragging?: boolean; - edgeDragging?: boolean; - dropTarget?: boolean; - actionIcon?: React.ReactElement; - actionIconClassName?: string; - onActionIconClick?: (e: React.MouseEvent) => void; - badge?: string; - badgeColor?: string; - badgeTextColor?: string; - badgeBorderColor?: string; - badgeClassName?: string; - badgeLocation?: BadgeLocation; -} & Partial; - -/** - * Renders a `` component with a `` box behind. - */ -const NodeLabel: React.FunctionComponent = ({ - children, - className, - paddingX = 0, - paddingY = 0, - cornerRadius = 4, - x = 0, - y = 0, - position = LabelPosition.bottom, - secondaryLabel, - status, - badge, - badgeColor, - badgeTextColor, - badgeBorderColor, - badgeClassName, - badgeLocation = BadgeLocation.inner, - labelIconClass, - labelIcon, - labelIconPadding = 4, - truncateLength, - dragRef, - hover, - dragging, - edgeDragging, - dropTarget, - onContextMenu, - contextMenuOpen, - actionIcon, - actionIconClassName, - onActionIconClick, - ...other -}) => { - const [labelHover, labelHoverRef] = useHover(); - const refs = useCombineRefs(dragRef, typeof truncateLength === 'number' ? labelHoverRef : undefined); - - const [textSize, textRef] = useSize([children, truncateLength, className, labelHover]); - const [secondaryTextSize, secondaryTextRef] = useSize([secondaryLabel, truncateLength, className, labelHover]); - const [badgeSize, badgeRef] = useSize([badge]); - const [actionSize, actionRef] = useSize([actionIcon, paddingX]); - const [contextSize, contextRef] = useSize([onContextMenu, paddingX]); - - const { - width, - height, - backgroundHeight, - startX, - startY, - badgeStartX, - badgeStartY, - actionStartX, - contextStartX, - iconSpace, - badgeSpace - } = React.useMemo(() => { - if (!textSize) { - return { - width: 0, - height: 0, - backgroundHeight: 0, - startX: 0, - startY: 0, - badgeStartX: 0, - badgeStartY: 0, - actionStartX: 0, - contextStartX: 0, - iconSpace: 0, - badgeSpace: 0 - }; - } - const badgeSpace = badge && badgeSize && badgeLocation === BadgeLocation.inner ? badgeSize.width + paddingX : 0; - const height = Math.max(textSize.height, badgeSize?.height ?? 0) + paddingY * 2; - const iconSpace = labelIconClass || labelIcon ? (height + paddingY * 0.5) / 2 : 0; - const actionSpace = actionIcon && actionSize ? actionSize.width : 0; - const contextSpace = onContextMenu && contextSize ? contextSize.width : 0; - const primaryWidth = iconSpace + badgeSpace + paddingX + textSize.width + actionSpace + contextSpace + paddingX; - const secondaryWidth = secondaryLabel && secondaryTextSize ? secondaryTextSize.width + 2 * paddingX : 0; - const width = Math.max(primaryWidth, secondaryWidth); - const startX = position === LabelPosition.right ? x + iconSpace : x - width / 2 + iconSpace / 2; - const startY = position === LabelPosition.right ? y - height / 2 : y; - const actionStartX = iconSpace + badgeSpace + paddingX + textSize.width + paddingX; - const contextStartX = actionStartX + actionSpace; - const backgroundHeight = - height + (secondaryLabel && secondaryTextSize ? secondaryTextSize.height + paddingY * 2 : 0); - let badgeStartX = 0; - let badgeStartY = 0; - if (badgeSize) { - if (badgeLocation === BadgeLocation.below) { - badgeStartX = (width - badgeSize.width) / 2; - badgeStartY = height + paddingY; - } else { - badgeStartX = iconSpace + paddingX; - badgeStartY = (height - badgeSize.height) / 2; - } - } - - return { - width, - height, - backgroundHeight, - startX, - startY, - actionStartX, - contextStartX, - badgeStartX, - badgeStartY, - iconSpace, - badgeSpace: badgeSize && badgeLocation === BadgeLocation.inner ? badgeSpace : 0 - }; - }, [ - textSize, - badge, - badgeSize, - badgeLocation, - paddingX, - paddingY, - labelIconClass, - labelIcon, - actionIcon, - actionSize, - onContextMenu, - contextSize, - secondaryLabel, - secondaryTextSize, - position, - x, - y - ]); - - let filterId; - if (status === 'danger') { - filterId = NODE_SHADOW_FILTER_ID_DANGER; - } else if (hover || dragging || edgeDragging || dropTarget) { - filterId = NODE_SHADOW_FILTER_ID_HOVER; - } - - return ( - - - {textSize && ( - - )} - {textSize && badge && ( - - )} - {textSize && secondaryLabel && ( - <> - - - {truncateLength > 0 && !labelHover - ? truncateMiddle(secondaryLabel, { length: truncateLength }) - : secondaryLabel} - - - )} - {textSize && (labelIconClass || labelIcon) && ( - - )} - - {truncateLength > 0 && !labelHover ? truncateMiddle(children, { length: truncateLength }) : children} - - {textSize && actionIcon && ( - <> - - - - )} - {textSize && onContextMenu && ( - <> - - - - )} - - ); -}; - -export default NodeLabel; diff --git a/packages/react-topology/src/components/nodes/labels/index.ts b/packages/react-topology/src/components/nodes/labels/index.ts deleted file mode 100644 index 11dcc59c8e2..00000000000 --- a/packages/react-topology/src/components/nodes/labels/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { default as LabelActionIcon } from './LabelActionIcon'; -export { default as LabelBadge } from './LabelBadge'; -export { default as LabelContextMenu } from './LabelContextMenu'; -export { default as LabelIcon } from './LabelIcon'; -export { default as NodeLabel } from './NodeLabel'; diff --git a/packages/react-topology/src/components/nodes/shapes/Ellipse.tsx b/packages/react-topology/src/components/nodes/shapes/Ellipse.tsx deleted file mode 100644 index d299e875683..00000000000 --- a/packages/react-topology/src/components/nodes/shapes/Ellipse.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import * as React from 'react'; -import { useAnchor } from '../../../behavior'; -import { EllipseAnchor } from '../../../anchors'; -import { ShapeProps } from './shapeUtils'; - -type EllipseProps = ShapeProps; - -const Ellipse: React.FunctionComponent = ({ - className = css(styles.topologyNodeBackground), - width, - height, - filter, - dndDropRef -}) => { - useAnchor(EllipseAnchor); - return ( - - ); -}; - -export default Ellipse; diff --git a/packages/react-topology/src/components/nodes/shapes/Hexagon.tsx b/packages/react-topology/src/components/nodes/shapes/Hexagon.tsx deleted file mode 100644 index fd13a1867fb..00000000000 --- a/packages/react-topology/src/components/nodes/shapes/Hexagon.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import * as React from 'react'; -import { HEXAGON_CORNER_RADIUS, ShapeProps } from './shapeUtils'; -import { SidedShape } from './index'; - -type HexagonProps = ShapeProps & { - cornerRadius?: number; -}; - -const Hexagon: React.FunctionComponent = props => ( - -); - -export default Hexagon; diff --git a/packages/react-topology/src/components/nodes/shapes/Octagon.tsx b/packages/react-topology/src/components/nodes/shapes/Octagon.tsx deleted file mode 100644 index 5bb02b107ac..00000000000 --- a/packages/react-topology/src/components/nodes/shapes/Octagon.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import * as React from 'react'; -import { OCTAGON_CORNER_RADIUS, ShapeProps } from './shapeUtils'; -import { SidedShape } from './index'; - -type OctagonProps = ShapeProps & { - cornerRadius?: number; -}; - -const Octagon: React.FunctionComponent = props => ( - -); - -export default Octagon; diff --git a/packages/react-topology/src/components/nodes/shapes/Rectangle.tsx b/packages/react-topology/src/components/nodes/shapes/Rectangle.tsx deleted file mode 100644 index 536d42f22d9..00000000000 --- a/packages/react-topology/src/components/nodes/shapes/Rectangle.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import * as React from 'react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { useAnchor } from '../../../behavior'; -import { RectAnchor } from '../../../anchors'; -import { ShapeProps } from './shapeUtils'; - -type RectangleProps = ShapeProps & { - cornerRadius?: number; -}; - -const Rectangle: React.FunctionComponent = ({ - className = css(styles.topologyNodeBackground), - width, - height, - filter, - cornerRadius = 15, - dndDropRef -}) => { - useAnchor(RectAnchor); - return ( - - ); -}; - -export default Rectangle; diff --git a/packages/react-topology/src/components/nodes/shapes/Rhombus.tsx b/packages/react-topology/src/components/nodes/shapes/Rhombus.tsx deleted file mode 100644 index c8cf54d2c40..00000000000 --- a/packages/react-topology/src/components/nodes/shapes/Rhombus.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import * as React from 'react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { PointTuple } from '../../../types'; -import { getHullPath, RHOMBUS_CORNER_RADIUS, ShapeProps } from './shapeUtils'; -import { useSvgAnchor } from '../../../behavior'; -import { useCombineRefs } from '../../../utils'; - -type RhombusProps = ShapeProps & { - cornerRadius?: number; -}; - -const getRhombusPoints = (width: number, height: number, padding: number): PointTuple[] => [ - [width / 2, -padding], - [width + padding, height / 2], - [width / 2, height + padding], - [-padding, height / 2] -]; - -const Rhombus: React.FunctionComponent = ({ - className = css(styles.topologyNodeBackground), - width, - height, - filter, - cornerRadius = RHOMBUS_CORNER_RADIUS, - dndDropRef -}) => { - const anchorRef = useSvgAnchor(); - const refs = useCombineRefs(dndDropRef, anchorRef); - const points = React.useMemo(() => { - const polygonPoints: PointTuple[] = getRhombusPoints(width, height, cornerRadius / 2); - - return cornerRadius - ? getHullPath(getRhombusPoints(width, height, -cornerRadius), cornerRadius) - : polygonPoints.map(p => `${p[0]},${p[1]}`).join(' '); - }, [cornerRadius, height, width]); - - return cornerRadius ? ( - - ) : ( - - ); -}; - -export default Rhombus; diff --git a/packages/react-topology/src/components/nodes/shapes/SidedShape.tsx b/packages/react-topology/src/components/nodes/shapes/SidedShape.tsx deleted file mode 100644 index e74da83a5ad..00000000000 --- a/packages/react-topology/src/components/nodes/shapes/SidedShape.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import * as React from 'react'; -import { getPathForSides, getPointsForSides, ShapeProps } from './shapeUtils'; -import { usePolygonAnchor } from '../../../behavior'; - -type SidedProps = ShapeProps & { - sides?: number; - cornerRadius?: number; -}; - -const SidedShape: React.FunctionComponent = ({ - className = css(styles.topologyNodeBackground), - width, - height, - filter, - sides = 6, - cornerRadius = 0, - dndDropRef -}) => { - const [polygonPoints, points] = React.useMemo(() => { - const polygonPoints = getPointsForSides(sides, Math.min(width, height)); - return [ - polygonPoints, - cornerRadius - ? getPathForSides(sides, Math.min(width, height), cornerRadius) - : polygonPoints.map(p => `${p[0]},${p[1]}`).join(' ') - ]; - }, [cornerRadius, height, sides, width]); - - usePolygonAnchor(polygonPoints); - - return cornerRadius ? ( - - ) : ( - - ); -}; - -export default SidedShape; diff --git a/packages/react-topology/src/components/nodes/shapes/Stadium.tsx b/packages/react-topology/src/components/nodes/shapes/Stadium.tsx deleted file mode 100644 index 24c5a691451..00000000000 --- a/packages/react-topology/src/components/nodes/shapes/Stadium.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import * as React from 'react'; -import { useSvgAnchor } from '../../../behavior'; -import { getHullPath, ShapeProps } from './shapeUtils'; -import { PointTuple } from '../../../types'; -import { useCombineRefs } from '../../../utils'; - -const getStadiumPoints = (width: number, radius: number): PointTuple[] => [ - [radius, radius], - [width - radius, radius], - [width - radius, radius], - [radius, radius] -]; - -const Stadium: React.FunctionComponent = ({ - className = css(styles.topologyNodeBackground), - width, - height, - filter, - dndDropRef -}) => { - const anchorRef = useSvgAnchor(); - const refs = useCombineRefs(dndDropRef, anchorRef); - const points = React.useMemo(() => getHullPath(getStadiumPoints(width, height / 2), height / 2), [height, width]); - - return ; -}; - -export default Stadium; diff --git a/packages/react-topology/src/components/nodes/shapes/Trapezoid.tsx b/packages/react-topology/src/components/nodes/shapes/Trapezoid.tsx deleted file mode 100644 index 74b892aa461..00000000000 --- a/packages/react-topology/src/components/nodes/shapes/Trapezoid.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import * as React from 'react'; -import { PointTuple } from '../../../types'; -import { getHullPath, TRAPEZOID_CORNER_RADIUS, ShapeProps } from './shapeUtils'; -import { usePolygonAnchor } from '../../../behavior'; - -const TOP_INSET_AMOUNT = 1 / 8; - -const getTrapezoidPoints = (width: number, height: number, padding: number, outline: boolean = false): PointTuple[] => { - const yPadding = outline ? 0 : padding; - const topXPadding = outline ? padding / 4 : padding; - const bottomXPadding = outline ? -padding / 4 : padding; - - return [ - [width * TOP_INSET_AMOUNT + topXPadding, yPadding], - [width - width * TOP_INSET_AMOUNT - topXPadding, yPadding], - [width - bottomXPadding, height - yPadding], - [bottomXPadding, height - yPadding] - ]; -}; - -type TrapezoidProps = ShapeProps & { - cornerRadius?: number; -}; - -const Trapezoid: React.FunctionComponent = ({ - className = css(styles.topologyNodeBackground), - width, - height, - filter, - cornerRadius = TRAPEZOID_CORNER_RADIUS, - dndDropRef -}) => { - const [polygonPoints, points] = React.useMemo(() => { - const polygonPoints: PointTuple[] = getTrapezoidPoints(width, height, cornerRadius, true); - - const path = cornerRadius - ? getHullPath(getTrapezoidPoints(width, height, cornerRadius), cornerRadius) - : polygonPoints.map(p => `${p[0]},${p[1]}`).join(' '); - - return [polygonPoints, path]; - }, [height, cornerRadius, width]); - - usePolygonAnchor(polygonPoints); - - return cornerRadius ? ( - - ) : ( - - ); -}; - -export default Trapezoid; diff --git a/packages/react-topology/src/components/nodes/shapes/index.ts b/packages/react-topology/src/components/nodes/shapes/index.ts deleted file mode 100644 index 2b2a65f1b1b..00000000000 --- a/packages/react-topology/src/components/nodes/shapes/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export { default as Ellipse } from './Ellipse'; -export { default as Hexagon } from './Hexagon'; -export { default as Octagon } from './Octagon'; -export { default as Rectangle } from './Rectangle'; -export { default as Rhombus } from './Rhombus'; -export { default as Stadium } from './Stadium'; -export { default as Trapezoid } from './Trapezoid'; -export { default as SidedShape } from './SidedShape'; -export * from './shapeUtils'; diff --git a/packages/react-topology/src/components/nodes/shapes/shapeUtils.ts b/packages/react-topology/src/components/nodes/shapes/shapeUtils.ts deleted file mode 100644 index 12e3d5d751c..00000000000 --- a/packages/react-topology/src/components/nodes/shapes/shapeUtils.ts +++ /dev/null @@ -1,162 +0,0 @@ -import * as React from 'react'; -import { Node, NodeShape, PointTuple, TopologyQuadrant } from '../../../types'; -import { polygonHull } from 'd3-polygon'; -import { hullPath, pointTuplesToPath } from '../../../utils'; -import { Ellipse, Hexagon, Octagon, Rectangle, Trapezoid, Rhombus, Stadium } from './index'; - -const TWO_PI = Math.PI * 2; - -export const HEXAGON_CORNER_RADIUS = 6; -export const OCTAGON_CORNER_RADIUS = 4; -export const RHOMBUS_CORNER_RADIUS = 10; -export const TRAPEZOID_CORNER_RADIUS = 10; - -export const LOWER_LEFT_RADIANS = (3 * Math.PI) / 4; -export const LOWER_RIGHT_RADIANS = Math.PI / 4; -export const UPPER_LEFT_RADIANS = (5 * Math.PI) / 4; -export const UPPER_RIGHT_RADIANS = (7 * Math.PI) / 4; - -export const DEFAULT_DECORATOR_RADIUS = 12; -export const DEFAULT_DECORATOR_PADDING = 4; - -export interface ShapeProps { - className?: string; - element: Node; - width: number; - height: number; - filter?: string; - sides?: number; - cornerRadius?: number; - dndDropRef?: (node: SVGElement | null) => void; -} - -const quadrantRadians = (quadrant: TopologyQuadrant): number => { - switch (quadrant) { - case TopologyQuadrant.upperRight: - return UPPER_RIGHT_RADIANS; - case TopologyQuadrant.lowerRight: - return LOWER_RIGHT_RADIANS; - case TopologyQuadrant.upperLeft: - return UPPER_LEFT_RADIANS; - case TopologyQuadrant.lowerLeft: - return LOWER_LEFT_RADIANS; - } - return UPPER_RIGHT_RADIANS; -}; - -export const getPointsForSides = (numSides: number, size: number, padding = 0): PointTuple[] => { - const points: PointTuple[] = []; - const angle = TWO_PI / numSides; - const radius = size / 2; - - for (let point = 0; point < numSides; point++) { - points.push([ - radius + (radius - padding) * Math.cos(angle * point), - radius + (radius - padding) * Math.sin(angle * point) - ]); - } - - return points; -}; - -export const getHullPath = (points: PointTuple[], padding: number): string => { - const hullPoints: PointTuple[] = polygonHull(points); - return hullPath(hullPoints, padding); -}; -export const getPathForSides = (numSides: number, size: number, padding = 0): string => { - const points = getPointsForSides(numSides, size, padding); - if (!padding) { - return pointTuplesToPath(points); - } - - return getHullPath(points, padding); -}; - -export const getShapeComponent = (node: Node): React.FunctionComponent => { - switch (node.getNodeShape()) { - case NodeShape.circle: - case NodeShape.ellipse: - return Ellipse; - case NodeShape.stadium: - return Stadium; - case NodeShape.rhombus: - return Rhombus; - case NodeShape.trapezoid: - return Trapezoid; - case NodeShape.rect: - return Rectangle; - case NodeShape.hexagon: - return Hexagon; - case NodeShape.octagon: - return Octagon; - default: - return Ellipse; - } -}; - -export const getDefaultShapeDecoratorCenter = (quadrant: TopologyQuadrant, node: Node): { x: number; y: number } => { - const { width, height } = node.getDimensions(); - const shape = node.getNodeShape(); - const nodeCenterX = width / 2; - const nodeCenterY = height / 2; - let deltaX = width / 2; - let deltaY = height / 2; - - switch (shape) { - case NodeShape.circle: - case NodeShape.ellipse: - return { - x: nodeCenterX + Math.cos(quadrantRadians(quadrant)) * deltaX, - y: nodeCenterY + Math.sin(quadrantRadians(quadrant)) * deltaY - }; - case NodeShape.rect: - break; - case NodeShape.rhombus: - deltaX = width / 3; - deltaY = height / 3; - break; - case NodeShape.trapezoid: - if (quadrant === TopologyQuadrant.upperRight || quadrant === TopologyQuadrant.upperLeft) { - deltaX = deltaX * 0.875 - TRAPEZOID_CORNER_RADIUS; - } - break; - case NodeShape.hexagon: - deltaX = deltaX * 0.75 - HEXAGON_CORNER_RADIUS; - deltaY = deltaY * 0.75; - break; - case NodeShape.octagon: - deltaX = deltaX - OCTAGON_CORNER_RADIUS; - deltaY = deltaY - height / 5; - break; - default: - break; - } - - switch (quadrant) { - case TopologyQuadrant.upperRight: - return { - x: nodeCenterX + deltaX, - y: nodeCenterY - deltaY - }; - case TopologyQuadrant.lowerRight: - return { - x: nodeCenterX + deltaX, - y: nodeCenterY + deltaY - }; - case TopologyQuadrant.upperLeft: - return { - x: nodeCenterX - deltaX, - y: nodeCenterY - deltaY - }; - case TopologyQuadrant.lowerLeft: - return { - x: nodeCenterX - deltaX, - y: nodeCenterY + deltaY - }; - default: - return { - x: nodeCenterX, - y: nodeCenterY - }; - } -}; diff --git a/packages/react-topology/src/components/popper/Popper.tsx b/packages/react-topology/src/components/popper/Popper.tsx deleted file mode 100644 index 14d235334d5..00000000000 --- a/packages/react-topology/src/components/popper/Popper.tsx +++ /dev/null @@ -1,230 +0,0 @@ -import * as React from 'react'; -import PopperJS, { PopperOptions } from 'popper.js'; -import useCombineRefs from '../../utils/useCombineRefs'; -import Portal from './Portal'; - -// alignment with PopperJS reference API -interface PopperJSReference { - getBoundingClientRect: PopperJS['reference']['getBoundingClientRect']; - clientWidth: number; - clientHeight: number; -} - -interface ClientRectProp { - x: number; - y: number; - width?: number; - height?: number; -} - -type Reference = Element | PopperJSReference | ClientRectProp; - -class VirtualReference implements PopperJSReference { - private rect: ClientRect; - - constructor({ height = 0, width = 0, x, y }: ClientRectProp) { - this.rect = { - bottom: y + height, - height, - left: x, - right: x + width, - top: y, - width - }; - } - - getBoundingClientRect(): ClientRect { - return this.rect; - } - - get clientWidth(): number { - return this.rect.width || 0; - } - - get clientHeight(): number { - return this.rect.height || 0; - } -} - -const getReference = (reference: Reference): PopperJSReference => - 'getBoundingClientRect' in reference ? reference : new VirtualReference(reference); - -interface PopperProps { - children?: React.ReactNode; - closeOnEsc?: boolean; - closeOnOutsideClick?: boolean; - container?: React.ComponentProps['container']; - className?: string; - open?: boolean; - onRequestClose?: (e?: Event) => void; - placement?: - | 'bottom-end' - | 'bottom-start' - | 'bottom' - | 'left-end' - | 'left-start' - | 'left' - | 'right-end' - | 'right-start' - | 'right' - | 'top-end' - | 'top-start' - | 'top'; - popperOptions?: PopperOptions; - popperRef?: React.Ref; - reference: Reference | (() => Reference); - zIndex?: number; - returnFocus?: boolean; -} - -const DEFAULT_POPPER_OPTIONS: PopperOptions = {}; - -const Popper: React.FunctionComponent = ({ - children, - container, - className, - open, - placement = 'bottom-start', - reference, - popperOptions = DEFAULT_POPPER_OPTIONS, - closeOnEsc, - closeOnOutsideClick, - onRequestClose, - popperRef: popperRefIn, - zIndex = 9999, - returnFocus -}) => { - const controlled = typeof open === 'boolean'; - const openProp = controlled ? open || false : true; - const nodeRef = React.useRef(); - const popperRef = React.useRef(null); - const popperRefs = useCombineRefs(popperRef, popperRefIn); - const [isOpen, setOpenState] = React.useState(openProp); - const focusRef = React.useRef(); - const onRequestCloseRef = React.useRef(onRequestClose); - onRequestCloseRef.current = onRequestClose; - - const setOpen = React.useCallback( - (newOpen: boolean) => { - if (returnFocus && newOpen !== isOpen) { - if (newOpen) { - if (document.activeElement) { - focusRef.current = document.activeElement; - } - } else if (focusRef.current instanceof HTMLElement && focusRef.current.ownerDocument) { - focusRef.current.focus(); - } - } - setOpenState(newOpen); - }, - [returnFocus, isOpen] - ); - - React.useEffect(() => { - setOpen(openProp); - }, [openProp, setOpen]); - - const onKeyDown = React.useCallback( - (e: KeyboardEvent) => { - if (e.key === 'Escape') { - controlled ? onRequestCloseRef.current && onRequestCloseRef.current() : setOpen(false); - } - }, - [controlled, setOpen] - ); - - const onClickOutside = React.useCallback( - (e: Event) => { - if (!nodeRef.current || (e.target instanceof Node && !nodeRef.current.contains(e.target))) { - controlled ? onRequestCloseRef.current && onRequestCloseRef.current(e) : setOpen(false); - } - }, - [controlled, setOpen] - ); - - const destroy = React.useCallback(() => { - if (popperRef.current) { - popperRef.current.destroy(); - popperRefs(null); - document.removeEventListener('keydown', onKeyDown, true); - document.removeEventListener('mousedown', onClickOutside, true); - document.removeEventListener('touchstart', onClickOutside, true); - } - }, [onClickOutside, onKeyDown, popperRefs]); - - const initialize = React.useCallback(() => { - if (!nodeRef.current || !reference || !isOpen) { - return; - } - - destroy(); - - popperRefs( - new PopperJS(getReference(typeof reference === 'function' ? reference() : reference), nodeRef.current, { - placement, - ...popperOptions, - modifiers: { - preventOverflow: { - boundariesElement: 'viewport' - }, - ...popperOptions.modifiers - } - }) - ); - - // init document listenerrs - if (closeOnEsc) { - document.addEventListener('keydown', onKeyDown, true); - } - if (closeOnOutsideClick) { - document.addEventListener('mousedown', onClickOutside, true); - document.addEventListener('touchstart', onClickOutside, true); - } - }, [ - popperRefs, - reference, - isOpen, - destroy, - placement, - popperOptions, - closeOnEsc, - closeOnOutsideClick, - onKeyDown, - onClickOutside - ]); - - const nodeRefCallback = React.useCallback>( - node => { - nodeRef.current = node; - initialize(); - }, - [initialize] - ); - - React.useEffect(() => { - initialize(); - }, [initialize]); - - React.useEffect( - () => () => { - destroy(); - }, - [destroy] - ); - - React.useEffect(() => { - if (!isOpen) { - destroy(); - } - }, [destroy, isOpen]); - - return isOpen ? ( - -
- {children} -
-
- ) : null; -}; - -export default Popper; diff --git a/packages/react-topology/src/components/popper/Portal.tsx b/packages/react-topology/src/components/popper/Portal.tsx deleted file mode 100644 index c42be825696..00000000000 --- a/packages/react-topology/src/components/popper/Portal.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import * as React from 'react'; -import * as ReactDOM from 'react-dom'; -import { useIsomorphicLayoutEffect } from '@patternfly/react-core'; - -type GetContainer = Element | null | undefined | (() => Element); - -interface PortalProps { - children?: React.ReactNode; - container?: GetContainer; -} - -const getContainer = (container: GetContainer): Element | null | undefined => - typeof container === 'function' ? container() : container; - -const Portal: React.FunctionComponent = ({ children, container }) => { - const [containerNode, setContainerNode] = React.useState(); - - useIsomorphicLayoutEffect(() => { - setContainerNode(getContainer(container) || document.body); - }, [container]); - - return containerNode ? ReactDOM.createPortal(children, containerNode) : null; -}; - -export default Portal; diff --git a/packages/react-topology/src/components/popper/index.ts b/packages/react-topology/src/components/popper/index.ts deleted file mode 100644 index 74150c02ef8..00000000000 --- a/packages/react-topology/src/components/popper/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Popper } from './Popper'; diff --git a/packages/react-topology/src/components/svg/SvgDropShadowFilter.tsx b/packages/react-topology/src/components/svg/SvgDropShadowFilter.tsx deleted file mode 100644 index 5755a5e6d97..00000000000 --- a/packages/react-topology/src/components/svg/SvgDropShadowFilter.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import * as React from 'react'; -// eslint-disable-next-line patternfly-react/import-tokens-icons -import { global_palette_black_1000 as globalBlack1000 } from '@patternfly/react-tokens/dist/js/global_palette_black_1000'; -import { SVGDefs } from '../defs'; - -interface SvgDropShadowFilterProps { - // The unique ID that identifies the filter. - // It is also used to uniquely identify the def entry to prevent duplicates. - id: string; - dx?: number; - dy?: number; - stdDeviation?: number; - floodOpacity?: number; - floodColor?: string; -} - -const SvgDropShadowFilter: React.FunctionComponent = ({ - id, - dx = 0, - dy = 1, - stdDeviation = 2, - floodColor = globalBlack1000.value, - floodOpacity = 0.2 -}) => { - if (window.navigator.userAgent.includes('Edge')) { - // feDropShadow is not supported by Edge - return ( - - - - - - - - - - - - - ); - } - - return ( - - - - - - ); -}; - -export default SvgDropShadowFilter; diff --git a/packages/react-topology/src/const.ts b/packages/react-topology/src/const.ts deleted file mode 100644 index 65c2981972a..00000000000 --- a/packages/react-topology/src/const.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const ATTR_DATA_KIND = 'data-kind'; -export const ATTR_DATA_TYPE = 'data-type'; -export const ATTR_DATA_ID = 'data-id'; - -export const TOP_LAYER = 'top'; -export const GROUPS_LAYER = 'groups'; -export const DEFAULT_LAYER = 'default'; -export const BOTTOM_LAYER = 'bottom'; - -export const DEFAULT_LAYERS = [BOTTOM_LAYER, GROUPS_LAYER, DEFAULT_LAYER, TOP_LAYER]; diff --git a/packages/react-topology/src/declarations.d.ts b/packages/react-topology/src/declarations.d.ts deleted file mode 100644 index 7a83cc099ad..00000000000 --- a/packages/react-topology/src/declarations.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare module 'point-in-svg-path' { - export const pointInSvgPath: (d: string, x: number, y: number) => boolean; -} diff --git a/packages/react-topology/src/elements/BaseEdge.ts b/packages/react-topology/src/elements/BaseEdge.ts deleted file mode 100644 index e75e6bd10ae..00000000000 --- a/packages/react-topology/src/elements/BaseEdge.ts +++ /dev/null @@ -1,202 +0,0 @@ -import { computed, observable } from 'mobx'; -import Point from '../geom/Point'; -import { Anchor, AnchorEnd, Edge, EdgeAnimationSpeed, EdgeModel, EdgeStyle, ModelKind, Node } from '../types'; -import { getTopCollapsedParent } from '../utils'; -import BaseElement from './BaseElement'; - -export default class BaseEdge extends BaseElement - implements Edge { - @observable.ref - private source?: Node; - - @observable.ref - private target?: Node; - - @observable.ref - private edgeStyle?: EdgeStyle; - - @observable.ref - private animationSpeed?: EdgeAnimationSpeed; - - @observable.shallow - private bendpoints?: Point[]; - - @observable.ref - private startPoint?: Point; - - @observable.ref - private endPoint?: Point; - - @computed - private get sourceAnchor(): Anchor { - return this.getSourceAnchorNode().getAnchor(AnchorEnd.source, this.getType()); - } - - @computed - private get targetAnchor(): Anchor { - return this.getTargetAnchorNode().getAnchor(AnchorEnd.target, this.getType()); - } - - getKind(): ModelKind { - return ModelKind.edge; - } - - getSource(): Node { - if (!this.source) { - throw new Error(`Edge with ID '${this.getId()}' has no source.`); - } - return this.source; - } - - setSource(source: Node) { - this.source = source; - } - - getTarget(): Node { - if (!this.target) { - throw new Error(`Edge with ID '${this.getId()}' has no target.`); - } - return this.target; - } - - setTarget(target: Node) { - this.target = target; - } - - getEdgeStyle(): EdgeStyle { - return this.edgeStyle || EdgeStyle.default; - } - - setEdgeStyle(edgeStyle: EdgeStyle) { - this.edgeStyle = edgeStyle; - } - - getEdgeAnimationSpeed(): EdgeAnimationSpeed { - return this.animationSpeed || EdgeAnimationSpeed.none; - } - - setEdgeAnimationSpeed(animationSpeed?: EdgeAnimationSpeed) { - this.animationSpeed = animationSpeed || EdgeAnimationSpeed.none; - } - - getSourceAnchorNode(): Node { - if (!this.source) { - throw new Error(`Edge with ID '${this.getId()}' has no source.`); - } - return getTopCollapsedParent(this.source); - } - - getTargetAnchorNode(): Node { - if (!this.target) { - throw new Error(`Edge with ID '${this.getId()}' has no target.`); - } - return getTopCollapsedParent(this.target); - } - - getBendpoints(): Point[] { - return this.bendpoints || []; - } - - setBendpoints(points: Point[]) { - this.bendpoints = points; - } - - removeBendpoint(point: Point | number): void { - if (this.bendpoints) { - if (typeof point === 'number') { - this.bendpoints.splice(point, 1); - } else { - const idx = this.bendpoints.indexOf(point); - if (idx !== -1) { - this.bendpoints.splice(idx, 1); - } - } - } - } - - getStartPoint(): Point { - if (this.startPoint) { - return this.startPoint; - } - const bendpoints = this.getBendpoints(); - let referencePoint: Point; - if (bendpoints && bendpoints.length > 0) { - [referencePoint] = bendpoints; - } else if (this.endPoint) { - referencePoint = this.endPoint; - } else { - referencePoint = this.targetAnchor.getReferencePoint(); - } - return this.sourceAnchor.getLocation(referencePoint); - } - - setStartPoint(x?: number, y?: number): void { - if (x == null || y == null) { - this.startPoint = undefined; - } else { - this.startPoint = new Point(x, y); - } - } - - getEndPoint(): Point { - if (this.endPoint) { - return this.endPoint; - } - const bendpoints = this.getBendpoints(); - let referencePoint: Point; - if (bendpoints && bendpoints.length > 0) { - referencePoint = bendpoints[bendpoints.length - 1]; - } else if (this.startPoint) { - referencePoint = this.startPoint; - } else { - referencePoint = this.sourceAnchor.getReferencePoint(); - } - return this.targetAnchor.getLocation(referencePoint); - } - - setEndPoint(x?: number, y?: number): void { - if (x == null || y == null) { - this.endPoint = undefined; - } else { - this.endPoint = new Point(x, y); - } - } - - setModel(model: E): void { - super.setModel(model); - if (model.source) { - const node = this.getController().getNodeById(model.source); - if (!node) { - throw new Error(`No source node found with ID '${model.source}'.`); - } - this.source = node; - } - if (model.target) { - const node = this.getController().getNodeById(model.target); - if (!node) { - throw new Error(`No target node found with ID '${model.target}'.`); - } - this.target = node; - } - if ('edgeStyle' in model) { - this.edgeStyle = model.edgeStyle; - } - if ('animationSpeed' in model) { - this.animationSpeed = model.animationSpeed; - } - if ('bendpoints' in model) { - this.bendpoints = model.bendpoints ? model.bendpoints.map(b => new Point(b[0], b[1])) : []; - } - } - - toModel(): EdgeModel { - return { - ...super.toModel(), - source: this.getSource() ? this.getSource().getId() : undefined, - target: this.getTarget() ? this.getTarget().getId() : undefined, - edgeStyle: this.edgeStyle, - animationSpeed: this.animationSpeed, - bendpoints: this.getBendpoints().map(bp => [bp.x, bp.y]) - }; - } -} diff --git a/packages/react-topology/src/elements/BaseElement.ts b/packages/react-topology/src/elements/BaseElement.ts deleted file mode 100644 index 4e6174a6005..00000000000 --- a/packages/react-topology/src/elements/BaseElement.ts +++ /dev/null @@ -1,302 +0,0 @@ -import { observable, computed } from 'mobx'; -import * as _ from 'lodash'; -import { - ElementModel, - Graph, - GraphElement, - isGraph, - isNode, - Controller, - ModelKind, - ADD_CHILD_EVENT, - REMOVE_CHILD_EVENT, - ELEMENT_VISIBILITY_CHANGE_EVENT -} from '../types'; -import Stateful from '../utils/Stateful'; -import { Translatable } from '../geom/types'; - -export default abstract class BaseElement extends Stateful - implements GraphElement { - private id: string = ''; - - @observable - private type: string = ''; - - @observable.ref - private data?: D; - - @observable.ref - private parent?: GraphElement; - - @observable - private visible: boolean = true; - - @observable.shallow - private children: GraphElement[] = []; - - @observable.ref - private controller?: Controller; - - @observable - private label?: string; - - @observable - private style: any = {}; - - abstract getKind(): ModelKind; - - @computed({ equals: _.isEqual }) - private get ordering(): number[] { - if (!this.parent) { - return []; - } - const idx = this.parent.getChildren().indexOf(this); - const result = [...this.parent.getOrderKey(), idx]; - return result; - } - - getLabel(): string { - return this.label || ''; - } - - setLabel(label: string): void { - this.label = label; - } - - getOrderKey(): number[] { - return this.ordering; - } - - getController(): Controller { - if (!this.controller) { - throw new Error(`GraphElement with ID '${this.getId()}' has no controller.`); - } - return this.controller; - } - - setController(controller: Controller): void { - this.controller = controller; - } - - getGraph(): Graph { - // TODO fix project eslint rules - // eslint-disable-next-line @typescript-eslint/no-this-alias - let p: GraphElement = this; - while (!isGraph(p)) { - p = p.getParent(); - } - return p; - } - - getParent(): GraphElement { - if (!this.parent) { - throw new Error(`GraphElement with ID '${this.getId()}' has no parent.`); - } - return this.parent; - } - - setParent(parent: GraphElement): void { - if (this.parent !== parent) { - if (this.parent) { - this.remove(); - } - this.parent = parent; - } - } - - hasParent(): boolean { - return this.parent !== undefined; - } - - getId(): string { - return this.id; - } - - setId(id: string): void { - this.id = id; - } - - getType(): string { - return this.type; - } - - setType(type: string): void { - this.type = type; - } - - setVisible(visible: boolean): void { - if (this.visible !== visible) { - this.visible = visible; - if (this.controller) { - this.controller.fireEvent(ELEMENT_VISIBILITY_CHANGE_EVENT, { visible, target: this }); - } - } - } - - isVisible(): boolean { - return ( - this.visible && - (!this.parent || (this.parent.isVisible() && (!isNode(this.parent) || !this.parent.isCollapsed()))) - ); - } - - getData(): D | undefined { - return this.data; - } - - setData(data: D | undefined): void { - this.data = data; - } - - getStyle(): T { - return this.style; - } - - getChildren(): GraphElement[] { - return this.children; - } - - insertChild(child: GraphElement, index: number) { - if (this.children.length === 0 || index >= this.children.length || this.children[index] !== child) { - const idx = this.children.indexOf(child); - if (idx !== -1) { - this.children.splice(idx, 1); - this.children.splice(index, 0, child); - } else { - // remove from old parent - child.remove(); - child.setParent(this); - this.children.splice(index, 0, child); - - if (this.controller) { - this.controller.fireEvent(ADD_CHILD_EVENT, { target: this, child }); - } - } - } - } - - appendChild(child: GraphElement) { - if (this.children.length === 0 || this.children[this.children.length - 1] !== child) { - const idx = this.children.indexOf(child); - if (idx !== -1) { - this.children.splice(idx, 1); - this.children.push(child); - } else { - // remove from old parent - child.remove(); - child.setParent(this); - this.children.push(child); - - if (this.controller) { - this.controller.fireEvent(ADD_CHILD_EVENT, { target: this, child }); - } - } - } - } - - removeChild(child: GraphElement) { - if (this.children) { - const idx = this.children.indexOf(child); - if (idx !== -1) { - this.children.splice(idx, 1); - child.setParent(undefined); - - if (this.controller) { - this.controller.fireEvent(REMOVE_CHILD_EVENT, { target: this, child }); - } - } - } - } - - remove(): void { - if (this.parent) { - this.parent.removeChild(this); - } - } - - setModel(model: E): void { - if ('type' in model) { - this.setType(model.type); - } - if ('visible' in model) { - this.setVisible(!!model.visible); - } - if (Array.isArray(model.children)) { - const controller = this.getController(); - - const childElements = model.children.map(id => { - const element = controller.getElementById(id); - if (!element) { - throw new Error(`No element found with ID '${id}'.`); - } - return element; - }); - - // remove children - _.difference(this.children, childElements).forEach(child => this.removeChild(child)); - - // add children - const toAdd = _.difference(childElements, this.children); - toAdd.reverse().forEach(child => this.insertChild(child, 0)); - } - if ('data' in model) { - this.data = model.data; - } - if ('label' in model) { - this.label = model.label; - } - if ('style' in model) { - _.merge(this.style, model.style); - } - } - - toModel(): ElementModel { - return { - id: this.getId(), - type: this.getType(), - label: this.getLabel(), - visible: this.isVisible(), - children: this.getChildren().map(c => c.getId()), - data: this.getData(), - style: this.getStyle() - }; - } - - raise(): void { - const { parent } = this; - if (parent) { - parent.appendChild(this); - parent.raise(); - } - } - - translateToAbsolute(t: Translatable): void { - this.translateToParent(t); - const { parent } = this; - if (parent) { - parent.translateToAbsolute(t); - } - } - - translateFromAbsolute(t: Translatable): void { - const { parent } = this; - if (parent) { - parent.translateFromAbsolute(t); - } - this.translateFromParent(t); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - translateToParent(t: Translatable): void { - // nothing to do - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - translateFromParent(t: Translatable): void { - // nothing to do - } - - destroy(): void { - // nothing to do - } -} diff --git a/packages/react-topology/src/elements/BaseGraph.ts b/packages/react-topology/src/elements/BaseGraph.ts deleted file mode 100644 index 49baec2f125..00000000000 --- a/packages/react-topology/src/elements/BaseGraph.ts +++ /dev/null @@ -1,370 +0,0 @@ -import { computed, observable } from 'mobx'; -import Rect from '../geom/Rect'; -import Point from '../geom/Point'; -import Dimensions from '../geom/Dimensions'; -import { DEFAULT_LAYERS } from '../const'; -import { - Edge, - Graph, - GRAPH_POSITION_CHANGE_EVENT, - GraphModel, - isEdge, - isNode, - Layout, - ModelKind, - Node, - NodeModel, - ScaleExtent, - ScaleDetailsLevel, - ScaleDetailsThresholds -} from '../types'; -import BaseElement from './BaseElement'; - -export default class BaseGraph extends BaseElement - implements Graph { - @observable.ref - private layers = DEFAULT_LAYERS; - - @observable - private scale = 1; - - @observable - private layoutType?: string; - - @observable.ref - private dimensions = new Dimensions(); - - @observable.ref - private position = new Point(); - - private currentLayout?: Layout; - - @observable.ref - private scaleExtent: ScaleExtent = [0.25, 4]; - - @computed - private get detailsLevel(): ScaleDetailsLevel { - if (!this.scaleDetailsThresholds) { - return ScaleDetailsLevel.high; - } - if (this.scale <= this.scaleDetailsThresholds.low) { - return ScaleDetailsLevel.low; - } else if (this.scale <= this.scaleDetailsThresholds.medium) { - return ScaleDetailsLevel.medium; - } - return ScaleDetailsLevel.high; - } - - @computed - private get edges(): Edge[] { - return this.getChildren().filter(isEdge); - } - - @computed - private get nodes(): Node[] { - return this.getChildren().filter(isNode); - } - - @observable.ref - private scaleDetailsThresholds: ScaleDetailsThresholds = { - low: 0.3, - medium: 0.5 - }; - - getKind(): ModelKind { - return ModelKind.graph; - } - - getLayers(): string[] { - return this.layers; - } - - setLayers(layers: string[]): void { - this.layers = layers; - } - - getScaleExtent(): ScaleExtent { - return this.scaleExtent; - } - - setScaleExtent(scaleExtent: ScaleExtent): void { - try { - this.getController().fireEvent(GRAPH_POSITION_CHANGE_EVENT, { graph: this }); - // eslint-disable-next-line no-empty - } catch (e) {} - this.scaleExtent = scaleExtent; - } - - getDetailsLevelThresholds(): ScaleDetailsThresholds | undefined { - return this.scaleDetailsThresholds; - } - - setDetailsLevelThresholds(settings: ScaleDetailsThresholds | undefined): void { - this.scaleDetailsThresholds = settings; - } - - getDetailsLevel(): ScaleDetailsLevel { - return this.detailsLevel; - } - - getBounds(): Rect { - const { - position: { x, y }, - dimensions: { width, height } - } = this; - return new Rect(x, y, width, height); - } - - setBounds(bounds: Rect): void { - const { width, height } = this.dimensions; - if (bounds.width !== width || bounds.height !== height) { - this.dimensions = new Dimensions(bounds.width, bounds.height); - } - const { x, y } = this.position; - if (bounds.x !== x || bounds.y !== y) { - this.setPosition(new Point(bounds.x, bounds.y)); - } - } - - getPosition(): Point { - return this.position; - } - - setPosition(point: Point): void { - try { - this.getController().fireEvent(GRAPH_POSITION_CHANGE_EVENT, { graph: this }); - // eslint-disable-next-line no-empty - } catch (e) {} - this.position = point; - } - - getDimensions(): Dimensions { - return this.dimensions; - } - - setDimensions(dimensions: Dimensions): void { - this.dimensions = dimensions; - } - - getNodes(): Node[] { - return this.nodes; - } - - getEdges(): Edge[] { - return this.edges; - } - - getLayout(): string | undefined { - return this.layoutType; - } - - setLayout(layout: string | undefined): void { - if (layout === this.layoutType) { - return; - } - - if (this.currentLayout) { - this.currentLayout.destroy(); - } - - this.layoutType = layout; - this.currentLayout = layout ? this.getController().getLayout(layout) : undefined; - } - - layout(): void { - if (this.currentLayout) { - this.currentLayout.layout(); - } - } - - getScale(): number { - return this.scale; - } - - setScale(scale: number): void { - try { - this.getController().fireEvent(GRAPH_POSITION_CHANGE_EVENT, { graph: this }); - // eslint-disable-next-line no-empty - } catch (e) {} - this.scale = scale; - } - - reset(): void { - if (this.currentLayout) { - this.currentLayout.stop(); - } - this.setScale(1); - this.setPosition(new Point(0, 0)); - } - - scaleBy(scale: number, location?: Point): void { - const b = this.getBounds(); - let { x, y } = b; - const c = location || b.getCenter().translate(-x, -y); - x = (c.x - x) / this.scale; - y = (c.y - y) / this.scale; - const newScale = Math.max(Math.min(this.scale * scale, this.scaleExtent[1]), this.scaleExtent[0]); - this.setScale(newScale); - x = c.x - x * this.scale; - y = c.y - y * this.scale; - this.setPosition(new Point(x, y)); - } - - fit(padding = 0): void { - let rect: Rect | undefined; - this.getNodes().forEach(c => { - const b = c.getBounds(); - if (!rect) { - rect = b.clone(); - } else { - rect.union(b); - } - }); - if (!rect) { - return; - } - - const { width, height } = rect; - - if (width === 0 || height === 0) { - return; - } - - const { width: fullWidth, height: fullHeight } = this.getDimensions(); - const midX = rect.x + width / 2; - const midY = rect.y + height / 2; - - // set the max scale to be the current zoom level or 1 - const maxScale = Math.max(this.getScale(), 1); - - // compute the scale - const scale = Math.min( - 1 / Math.max(width / Math.max(1, fullWidth - padding), height / Math.max(1, fullHeight - padding)), - maxScale - ); - - // translate to center - const tx = fullWidth / 2 - midX * scale; - const ty = fullHeight / 2 - midY * scale; - - // TODO should scale and bound be kept in a single geom Transform object instead of separately? - this.setScale(scale); - this.setPosition(new Point(tx, ty)); - } - - panIntoView = ( - nodeElement: Node, - { offset = 0, minimumVisible = 0 }: { offset?: number; minimumVisible?: number } = {} - ): void => { - if (!nodeElement) { - return; - } - const { x: viewX, y: viewY, width: viewWidth, height: viewHeight } = this.getBounds(); - const boundingBox = nodeElement - .getBounds() - .clone() - .scale(this.scale) - .translate(viewX, viewY); - const { x, y, width, height } = boundingBox; - let move = false; - const panOffset = offset * this.scale; - const minVisibleSize = minimumVisible * this.scale; - - const newLocation = { - x: viewX, - y: viewY - }; - - if (x + width - minVisibleSize < 0) { - newLocation.x -= x - panOffset; - move = true; - } - if (x + minVisibleSize > viewWidth) { - newLocation.x -= x + width - viewWidth + panOffset; - move = true; - } - if (y + height - minVisibleSize < 0) { - newLocation.y -= y - panOffset; - move = true; - } - if (y + minVisibleSize > viewHeight) { - newLocation.y -= y + height - viewHeight + panOffset; - move = true; - } - - if (move) { - this.setBounds(new Rect(newLocation.x, newLocation.y, viewWidth, viewHeight)); - } - }; - - isNodeInView(element: Node, { padding = 0 }): boolean { - const graph = element.getGraph(); - const { x: viewX, y: viewY, width: viewWidth, height: viewHeight } = graph.getBounds(); - const { x, y, width, height } = element - .getBounds() - .clone() - .scale(this.scale) - .translate(viewX, viewY); - - return x + width > -padding && x < viewWidth + padding && y + height > -padding && y < viewHeight + padding; - } - - setModel(model: E): void { - super.setModel(model); - - if ('layers' in model && model.layers) { - this.setLayers(model.layers); - } - if ('layout' in model) { - this.setLayout(model.layout); - } - if (model.scaleExtent && model.scaleExtent.length === 2) { - this.setScaleExtent(model.scaleExtent); - } - if ('scale' in model && typeof model.scale === 'number') { - this.setScale(+model.scale); - } - let p: Point | undefined; - if ('x' in model && model.x != null) { - if (!p) { - p = this.position.clone(); - } - p.x = model.x; - } - if ('y' in model && model.y != null) { - if (!p) { - p = this.position.clone(); - } - p.y = model.y; - } - if (p) { - this.setPosition(p); - } - } - - toModel(): GraphModel { - return { - ...super.toModel(), - layout: this.getLayout(), - x: this.getPosition().x, - y: this.getPosition().y, - scale: this.getScale(), - scaleExtent: this.getScaleExtent(), - layers: this.getLayers() - }; - } - - translateToAbsolute(): void { - // do nothing - } - - translateFromAbsolute(): void { - // do nothing - } - - destroy(): void { - if (this.currentLayout) { - this.currentLayout.destroy(); - } - } -} diff --git a/packages/react-topology/src/elements/BaseNode.ts b/packages/react-topology/src/elements/BaseNode.ts deleted file mode 100644 index 9623981352c..00000000000 --- a/packages/react-topology/src/elements/BaseNode.ts +++ /dev/null @@ -1,401 +0,0 @@ -import { observable, computed } from 'mobx'; -import { - Node, - Anchor, - NodeModel, - ModelKind, - isNode, - isEdge, - AnchorEnd, - NodeStyle, - NodeShape, - Edge, - GraphElement, - NODE_COLLAPSE_CHANGE_EVENT, - NODE_POSITIONED_EVENT, - NodeStatus, - LabelPosition -} from '../types'; -import CenterAnchor from '../anchors/CenterAnchor'; -import Rect from '../geom/Rect'; -import { Translatable } from '../geom/types'; -import BaseElement from './BaseElement'; -import Dimensions from '../geom/Dimensions'; -import Point from '../geom/Point'; - -const createAnchorKey = (end: AnchorEnd = AnchorEnd.both, type: string = ''): string => `${end}:${type}`; - -export default class BaseNode extends BaseElement - implements Node { - @observable.shallow - private anchors: { [type: string]: Anchor } = { - [createAnchorKey()]: new CenterAnchor(this) - }; - - @observable.ref - private dimensions = new Dimensions(); - - @observable - private dimensionsInitialized = false; - - private positioned = false; - - private uncollapsedCenter: Point = null; - - @observable.ref - private position = new Point(); - - @computed - private get nodes(): Node[] { - if (this.isCollapsed()) { - return []; - } - - return this.getChildren().filter(isNode); - } - - @observable - private group = false; - - @observable - private collapsed = false; - - @observable - private labelPosition = LabelPosition.bottom; - - @observable - private shape: NodeShape | undefined; - - @observable - private status: NodeStatus | undefined; - - @computed - private get groupBounds(): Rect { - const children = this.getChildren() - .filter(isNode) - .filter(n => n.isVisible()); - if (!children.length) { - return this.getInternalBounds(); - } - - let rect: Rect | undefined; - children.forEach(c => { - if (isNode(c)) { - const { padding } = c.getStyle(); - const b = c.getBounds(); - // Currently non-group nodes do not include their padding in the bounds - if (!c.isGroup() && padding) { - b.padding(c.getStyle().padding); - } - if (!rect) { - rect = b.clone(); - } else { - rect.union(b); - } - } - }); - - if (!rect) { - rect = new Rect(); - } - - const { padding } = this.getStyle(); - - return rect.padding(padding); - } - - @computed - private get sourceEdges(): Edge[] { - return this.getGraph() - .getEdges() - .filter(e => e.getSource() === this); - } - - @computed - private get targetEdges(): Edge[] { - return this.getGraph() - .getEdges() - .filter(e => e.getTarget() === this); - } - - getChildren(): GraphElement[] { - if (this.isCollapsed()) { - return super.getChildren().filter(isEdge); - } - return super.getChildren(); - } - - // Return all child leaf nodes regardless of collapse status or child groups' collapsed status - getAllNodeChildren(): Node[] { - return super.getChildren().reduce((total, nexChild) => { - if (isNode(nexChild)) { - total.push(nexChild.isGroup() ? nexChild.getAllNodeChildren() : nexChild); - } - return total; - }, []); - } - - getKind(): ModelKind { - return ModelKind.node; - } - - private getInternalBounds(): Rect { - const { position, dimensions } = this; - return new Rect(position.x, position.y, dimensions.width, dimensions.height); - } - - getBounds(): Rect { - return this.group && !this.collapsed ? this.groupBounds : this.getInternalBounds(); - } - - setBounds(bounds: Rect): void { - const { width, height } = this.dimensions; - if (bounds.width !== width || bounds.height !== height) { - this.dimensions = new Dimensions(bounds.width, bounds.height); - } - const { x, y } = this.position; - if (bounds.x !== x || bounds.y !== y) { - this.setPosition(new Point(bounds.x, bounds.y)); - } - } - - getPosition(): Point { - if (this.isGroup() && this.getChildren().length && !this.collapsed) { - return this.getBounds().getCenter(); - } - return this.position; - } - - updateChildrenPositions(point: Point, prevLocation: Point): void { - const xOffset = point.x - prevLocation.x; - const yOffset = point.y - prevLocation.y; - this.getChildren().forEach(child => { - if (isNode(child)) { - const node = child as Node; - const position = node.getPosition(); - const newPosition = new Point(position.x + xOffset, position.y + yOffset); - node.setPosition(newPosition); - } - }); - } - - setPosition(point: Point): void { - if (this.isGroup() && this.getChildren().length && !this.collapsed) { - const prevLocation = this.getBounds().getCenter(); - this.updateChildrenPositions(point, prevLocation); - return; - } - this.position = point; - this.positioned = true; - try { - this.getController().fireEvent(NODE_POSITIONED_EVENT, { node: this }); - // eslint-disable-next-line no-empty - } catch (e) {} - } - - isPositioned(): boolean { - return this.positioned; - } - - getDimensions(): Dimensions { - return this.dimensions; - } - - setDimensions(dimensions: Dimensions): void { - this.dimensions = dimensions; - this.dimensionsInitialized = true; - } - - isDimensionsInitialized(): boolean { - if (!this.dimensionsInitialized && this.isGroup()) { - const nodes = this.getChildren().filter(isNode); - if (nodes.length === 0) { - return this.dimensionsInitialized; - } - const result = nodes.every(c => c.isDimensionsInitialized()); - if (result) { - this.dimensionsInitialized = true; - } - } - return this.dimensionsInitialized; - } - - getAnchor(end?: AnchorEnd, type?: string): Anchor { - let anchor = this.anchors[createAnchorKey(end, type)]; - if (!anchor && type) { - anchor = this.anchors[createAnchorKey(end)]; - } - if (!anchor && (end === AnchorEnd.source || end === AnchorEnd.target)) { - anchor = this.anchors[createAnchorKey(AnchorEnd.both, type)]; - if (!anchor && type) { - anchor = this.anchors[createAnchorKey(AnchorEnd.both)]; - } - } - return anchor; - } - - setAnchor(anchor: Anchor, end?: AnchorEnd, type?: string): void { - const key = createAnchorKey(end, type); - if (anchor) { - this.anchors[key] = anchor; - } else { - delete this.anchors[key]; - } - } - - getNodes(): Node[] { - return this.nodes; - } - - isGroup(): boolean { - return this.group; - } - - setGroup(group: boolean): void { - this.group = group; - } - - isCollapsed(): boolean { - return this.collapsed; - } - - setCollapsed(collapsed: boolean): void { - if (collapsed !== this.collapsed) { - // Get the location prior to the collapse change and apply it after the collapse. - // This updates the new node(s) location(s) to be what the node was originally, basically - // keeping the nodes ln place so the layout doesn't start fresh (putting the new nodes at 0,0 - // TODO: Update to better position the nodes at a point location rather than relying on the setCenter updating the nodes. - const prevCenter = this.getBounds().getCenter(); - if (!collapsed && this.uncollapsedCenter) { - this.updateChildrenPositions(prevCenter, this.uncollapsedCenter); - this.uncollapsedCenter = null; - this.collapsed = collapsed; - } else { - this.uncollapsedCenter = collapsed ? prevCenter : null; - this.collapsed = collapsed; - this.setBounds(this.getBounds().setCenter(prevCenter.x, prevCenter.y)); - } - this.getController().fireEvent(NODE_COLLAPSE_CHANGE_EVENT, { node: this }); - } - } - - getLabelPosition(): LabelPosition { - return this.labelPosition; - } - - setLabelPosition(position: LabelPosition): void { - this.labelPosition = position; - } - - getNodeShape(): NodeShape { - return this.shape || (this.group ? NodeShape.rect : NodeShape.ellipse); - } - - setNodeShape(shape: NodeShape): void { - this.shape = shape; - } - - getNodeStatus(): NodeStatus { - return this.status || NodeStatus.default; - } - - setNodeStatus(status: NodeStatus): void { - this.status = status; - } - - getSourceEdges(): Edge[] { - return this.sourceEdges; - } - - getTargetEdges(): Edge[] { - return this.targetEdges; - } - - isVisible(): boolean { - return super.isVisible() && this.isDimensionsInitialized(); - } - - setModel(model: E): void { - super.setModel(model); - - let d: Dimensions | undefined; - let p: Point | undefined; - - if ('width' in model && model.width != null && model.width !== this.dimensions.width) { - if (!d) { - d = this.dimensions.clone(); - } - d.width = model.width; - } - if ('height' in model && model.height != null && model.height !== this.dimensions.height) { - if (!d) { - d = this.dimensions.clone(); - } - d.height = model.height; - } - if (d) { - this.setDimensions(d); - } - - if ('x' in model && model.x != null && model.x !== this.position.x) { - if (!p) { - p = this.position.clone(); - } - p.x = model.x; - } - if ('y' in model && model.y != null && model.y !== this.position.y) { - if (!p) { - p = this.position.clone(); - } - p.y = model.y; - } - if (p) { - this.setPosition(p); - } - - if ('group' in model) { - this.setGroup(!!model.group); - } - if ('labelPosition' in model) { - this.labelPosition = model.labelPosition; - } - if ('shape' in model) { - this.shape = model.shape; - } - if ('status' in model) { - this.status = model.status; - } - if ('collapsed' in model) { - this.setCollapsed(!!model.collapsed); - } - } - - toModel(): NodeModel { - return { - ...super.toModel(), - x: this.isPositioned() ? this.getPosition().x : undefined, - y: this.isPositioned() ? this.getPosition().y : undefined, - width: this.isDimensionsInitialized() ? this.getDimensions().width : undefined, - height: this.isDimensionsInitialized() ? this.getDimensions().height : undefined, - collapsed: this.isCollapsed(), - group: this.isGroup(), - labelPosition: this.labelPosition, - shape: this.shape, - status: this.status - }; - } - - translateToParent(t: Translatable): void { - if (!this.group || this.isCollapsed()) { - const { x, y } = this.getPosition(); - t.translate(x, y); - } - } - - translateFromParent(t: Translatable): void { - if (!this.group || this.isCollapsed()) { - const { x, y } = this.getPosition(); - t.translate(-x, -y); - } - } -} diff --git a/packages/react-topology/src/elements/__tests__/BaseGraph.spec.ts b/packages/react-topology/src/elements/__tests__/BaseGraph.spec.ts deleted file mode 100644 index 569cb1afc01..00000000000 --- a/packages/react-topology/src/elements/__tests__/BaseGraph.spec.ts +++ /dev/null @@ -1,334 +0,0 @@ -import Rect from '../../geom/Rect'; -import Point from '../../geom/Point'; -import { ModelKind, Graph, Layout, GraphModel } from '../../types'; -import BaseGraph from '../BaseGraph'; -import BaseEdge from '../BaseEdge'; -import BaseNode from '../BaseNode'; -import { Visualization } from '../../Visualization'; - -class TestLayout implements Layout { - layout = jest.fn(); - stop = jest.fn(); - destroy = jest.fn(); -} - -describe('BaseGraph', () => { - let graph: Graph; - - beforeEach(() => { - graph = new BaseGraph(); - }); - - it('should have a graph kind', () => { - expect(graph.getKind()).toBe(ModelKind.graph); - }); - - it('should update bounds', () => { - expect(graph.getBounds()).toEqual({ x: 0, y: 0, width: 0, height: 0 }); - const r = new Rect(10, 20, 30, 40); - graph.setBounds(r); - expect(graph.getBounds()).toEqual({ x: 10, y: 20, width: 30, height: 40 }); - }); - - it('should update scale', () => { - expect(graph.getScale()).toBe(1); - graph.setScale(3.5); - expect(graph.getScale()).toBe(3.5); - }); - - it('should reset position and scale', () => { - graph.setBounds(new Rect(10, 20, 30, 40)); - graph.setScale(2); - graph.reset(); - expect(graph.getScale()).toBe(1); - expect(graph.getBounds()).toEqual({ x: 0, y: 0, width: 30, height: 40 }); - }); - - it('should scaleBy the given multiple around the specified location', () => { - graph.setBounds(new Rect(0, 0, 100, 100)); - graph.scaleBy(0.5); - expect(graph.getScale()).toBe(0.5); - expect(graph.getBounds()).toEqual({ x: 25, y: 25, width: 100, height: 100 }); - graph.scaleBy(2); - expect(graph.getBounds()).toEqual({ x: 0, y: 0, width: 100, height: 100 }); - graph.scaleBy(0.5, new Point(100, 100)); - expect(graph.getBounds()).toEqual({ x: 50, y: 50, width: 100, height: 100 }); - }); - - it('should get child nodes and edges', () => { - const e1 = new BaseEdge(); - const n1 = new BaseNode(); - const n2 = new BaseNode(); - graph.appendChild(e1); - graph.appendChild(n1); - graph.appendChild(n2); - - expect(graph.getNodes()).toEqual([n1, n2]); - expect(graph.getEdges()).toEqual([e1]); - // FIXME #getChildren() returns a mobx array and we need to slice it before we can assert - expect(graph.getChildren().slice()).toEqual([e1, n1, n2]); - }); - - it('should get and set layouts', () => { - const LAYOUT1_TYPE = 'layout1'; - const LAYOUT2_TYPE = 'layout2'; - const layout1 = new TestLayout(); - const layout2 = new TestLayout(); - - const controller = new Visualization(); - controller.setGraph(graph); - controller.registerLayoutFactory(type => { - switch (type) { - case LAYOUT1_TYPE: - return layout1; - case LAYOUT2_TYPE: - return layout2; - default: - return undefined; - } - }); - - expect(graph.getLayout()).toBe(undefined); - - // set initial layout - graph.setLayout(LAYOUT1_TYPE); - expect(graph.getLayout()).toBe(LAYOUT1_TYPE); - - // run layout - expect(layout1.layout).not.toHaveBeenCalled(); - graph.layout(); - expect(layout1.layout).toHaveBeenCalledTimes(1); - - // change layout - expect(layout2.destroy).not.toHaveBeenCalled(); - graph.setLayout(LAYOUT2_TYPE); - expect(graph.getLayout()).toBe(LAYOUT2_TYPE); - expect(layout1.destroy).toHaveBeenCalledTimes(1); - - // set the same layout, ensure not destroyed - graph.setLayout(LAYOUT2_TYPE); - expect(layout2.destroy).not.toHaveBeenCalled(); - - // unset layout - graph.setLayout(undefined); - expect(layout2.destroy).toHaveBeenCalledTimes(1); - // this should be a noop - graph.layout(); - }); - - it('should adjust bounds to fit nodes', () => { - graph.setBounds(new Rect(0, 0, 100, 100)); - graph.setScaleExtent([0.1, 100]); - - // no change if no nodes - graph.fit(); - expect(graph.getScale()).toBe(1); - expect(graph.getBounds()).toEqual({ x: 0, y: 0, width: 100, height: 100 }); - - // add 1 node - const n1 = new BaseNode(); - n1.setBounds(new Rect(10, 10, 10, 10)); - graph.appendChild(n1); - - // centers the node in the view - graph.fit(); - expect(graph.getScale()).toBe(1); - expect(graph.getBounds()).toEqual({ x: 35, y: 35, width: 100, height: 100 }); - - // increases scale back to 1 if nodes fit - graph.setScale(0.25); - graph.fit(); - expect(graph.getScale()).toBe(1); - expect(graph.getBounds()).toEqual({ x: 35, y: 35, width: 100, height: 100 }); - - // keeps scale above 1 if nodes fit - graph.setScale(2); - graph.fit(); - expect(graph.getScale()).toBe(2); - expect(graph.getBounds()).toEqual({ x: 20, y: 20, width: 100, height: 100 }); - - // decreases scale so that nodes fit - graph.setScale(100); - graph.fit(); - expect(graph.getScale()).toBe(10); - expect(graph.getBounds()).toEqual({ x: -100, y: -100, width: 100, height: 100 }); - - // add another node out of bounds - const n2 = new BaseNode(); - n2.setBounds(new Rect(200, 200, 10, 10)); - graph.appendChild(n2); - - // adjusts scale as needed to ensure all nodes fit - graph.fit(); - expect(graph.getScale()).toBe(0.5); - expect(graph.getBounds()).toEqual({ x: -5, y: -5, width: 100, height: 100 }); - - // add some padding - graph.fit(20); - expect(graph.getScale()).toBe(0.4); - expect(graph.getBounds()).toEqual({ x: 6, y: 6, width: 100, height: 100 }); - }); - - it('should pan node into view', () => { - const n1 = new BaseNode(); - graph.appendChild(n1); - - // pan from left - graph.setBounds(new Rect(0, 0, 100, 100)); - n1.setBounds(new Rect(-20, 0, 10, 10)); - graph.panIntoView(n1); - expect(graph.getBounds()).toEqual({ x: 20, y: 0, width: 100, height: 100 }); - - // with offset - graph.setBounds(new Rect(0, 0, 100, 100)); - n1.setBounds(new Rect(-20, 0, 10, 10)); - graph.panIntoView(n1, { offset: 10 }); - expect(graph.getBounds()).toEqual({ x: 30, y: 0, width: 100, height: 100 }); - - // pan from top - graph.setBounds(new Rect(0, 0, 100, 100)); - n1.setBounds(new Rect(0, -20, 10, 10)); - graph.panIntoView(n1); - expect(graph.getBounds()).toEqual({ x: 0, y: 20, width: 100, height: 100 }); - - // with offset - graph.setBounds(new Rect(0, 0, 100, 100)); - n1.setBounds(new Rect(0, -20, 10, 10)); - graph.panIntoView(n1, { offset: 10 }); - expect(graph.getBounds()).toEqual({ x: 0, y: 30, width: 100, height: 100 }); - - // pan from right - graph.setBounds(new Rect(0, 0, 100, 100)); - n1.setBounds(new Rect(110, 0, 10, 10)); - graph.panIntoView(n1); - expect(graph.getBounds()).toEqual({ x: -20, y: 0, width: 100, height: 100 }); - - // with offset - graph.setBounds(new Rect(0, 0, 100, 100)); - n1.setBounds(new Rect(110, 0, 10, 10)); - graph.panIntoView(n1, { offset: 10 }); - expect(graph.getBounds()).toEqual({ x: -30, y: 0, width: 100, height: 100 }); - - // pan from top - graph.setBounds(new Rect(0, 0, 100, 100)); - n1.setBounds(new Rect(0, 110, 10, 10)); - graph.panIntoView(n1); - expect(graph.getBounds()).toEqual({ x: 0, y: -20, width: 100, height: 100 }); - - // with offset - graph.setBounds(new Rect(0, 0, 100, 100)); - n1.setBounds(new Rect(0, 110, 10, 10)); - graph.panIntoView(n1, { offset: 10 }); - expect(graph.getBounds()).toEqual({ x: 0, y: -30, width: 100, height: 100 }); - }); - - it('should pan node into view taking into account minimum visibile ', () => { - const n1 = new BaseNode(); - graph.appendChild(n1); - - // pan from left / top - graph.setBounds(new Rect(0, 0, 100, 100)); - n1.setBounds(new Rect(-7, -7, 10, 10)); - graph.panIntoView(n1, { minimumVisible: 3 }); - expect(graph.getBounds()).toEqual({ x: 0, y: 0, width: 100, height: 100 }); - - n1.setBounds(new Rect(-8, -8, 10, 10)); - graph.panIntoView(n1, { minimumVisible: 3 }); - expect(graph.getBounds()).toEqual({ x: 8, y: 8, width: 100, height: 100 }); - - // pan from right / bottom - graph.setBounds(new Rect(0, 0, 100, 100)); - n1.setBounds(new Rect(97, 97, 10, 10)); - graph.panIntoView(n1, { minimumVisible: 3 }); - expect(graph.getBounds()).toEqual({ x: 0, y: 0, width: 100, height: 100 }); - - n1.setBounds(new Rect(98, 98, 10, 10)); - graph.panIntoView(n1, { minimumVisible: 3 }); - expect(graph.getBounds()).toEqual({ x: -8, y: -8, width: 100, height: 100 }); - }); - - it('should set model layout', () => { - const layoutType = 'test'; - const controller = new Visualization(); - controller.setGraph(graph); - controller.registerLayoutFactory(type => { - return type === layoutType ? new TestLayout() : undefined; - }); - - const model: GraphModel = { - id: 'g', - type: ModelKind.graph, - layout: layoutType - }; - graph.setModel(model); - expect(graph.getLayout()).toBe(model.layout); - }); - - it('should set model scale', () => { - const model: GraphModel = { - id: 'g', - type: ModelKind.graph, - scale: 4 - }; - graph.setModel(model); - expect(graph.getScale()).toBe(model.scale); - }); - - it('should set model x, y', () => { - const model1: GraphModel = { - id: 'g', - type: ModelKind.graph, - x: 10 - }; - graph.setModel(model1); - expect(graph.getBounds().x).toBe(model1.x); - - const model2: GraphModel = { - id: 'g', - type: ModelKind.graph, - y: 20 - }; - graph.setModel(model2); - expect(graph.getBounds().x).toBe(model1.x); - expect(graph.getBounds().y).toBe(model2.y); - - const model3: GraphModel = { - id: 'g', - type: ModelKind.graph, - x: 2, - y: 3 - }; - graph.setModel(model3); - expect(graph.getBounds().x).toBe(model3.x); - expect(graph.getBounds().y).toBe(model3.y); - }); - - it('should not support translate', () => { - graph.setBounds(new Rect(10, 20, 30, 40)); - const p = new Point(5, 6); - graph.translateFromAbsolute(p); - expect(p).toEqual({ x: 5, y: 6 }); - - graph.translateToParent(p); - expect(p).toEqual({ x: 5, y: 6 }); - }); - - it('should set scale extents based on model', () => { - graph.setModel({ - id: 'test-graph-id', - type: 'graph', - scaleExtent: [0.2, 3.0], - scale: 5.5 - }); - expect(graph.getScale()).toBe(5.5); - const scaleExtent = graph.getScaleExtent(); - expect(scaleExtent[0]).toBe(0.2); - expect(scaleExtent[1]).toBe(3.0); - - // Scale extents do NOT prevent setting scale out of range - graph.setScale(10); - expect(graph.getScale()).toBe(10); - graph.setScale(0.1); - expect(graph.getScale()).toBe(0.1); - }); -}); diff --git a/packages/react-topology/src/elements/__tests__/BaseNode.spec.ts b/packages/react-topology/src/elements/__tests__/BaseNode.spec.ts deleted file mode 100644 index 1d6fa6e1113..00000000000 --- a/packages/react-topology/src/elements/__tests__/BaseNode.spec.ts +++ /dev/null @@ -1,47 +0,0 @@ -import Dimensions from '../../geom/Dimensions'; -import BaseNode from '../BaseNode'; - -describe('BaseNode', () => { - it('should init dimensions', () => { - let node = new BaseNode(); - expect(node.isDimensionsInitialized()).toBe(false); - node.setDimensions(new Dimensions()); - expect(node.isDimensionsInitialized()).toBe(true); - node = new BaseNode(); - node.setModel({ - id: 'test', - type: 'test', - width: 1, - height: 1 - }); - expect(node.isDimensionsInitialized()).toBe(true); - }); - - it('should be invisible until dimensions are set', () => { - const node = new BaseNode(); - node.setVisible(true); - expect(node.isDimensionsInitialized()).toBe(false); - expect(node.isVisible()).toBe(false); - node.setDimensions(new Dimensions()); - expect(node.isDimensionsInitialized()).toBe(true); - expect(node.isVisible()).toBe(true); - }); - - it('should init group dimensions based on child state', () => { - const node = new BaseNode(); - node.setGroup(true); - expect(node.isDimensionsInitialized()).toBe(false); - - const c1 = new BaseNode(); - node.appendChild(c1); - expect(node.isDimensionsInitialized()).toBe(false); - c1.setDimensions(new Dimensions()); - expect(node.isDimensionsInitialized()).toBe(true); - - node.removeChild(c1); - expect(node.isDimensionsInitialized()).toBe(true); - - node.setGroup(false); - expect(node.isDimensionsInitialized()).toBe(true); - }); -}); diff --git a/packages/react-topology/src/elements/__tests__/defaultElementFactory.spec.ts b/packages/react-topology/src/elements/__tests__/defaultElementFactory.spec.ts deleted file mode 100644 index 2a8662b2941..00000000000 --- a/packages/react-topology/src/elements/__tests__/defaultElementFactory.spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import defaultElementFactory from '../defaultElementFactory'; -import { ModelKind } from '../../types'; -import BaseGraph from '../BaseGraph'; -import BaseNode from '../BaseNode'; -import BaseEdge from '../BaseEdge'; - -describe('defaultElementFactory', () => { - it('should create base elements', () => { - expect(defaultElementFactory(ModelKind.graph, '') instanceof BaseGraph).toBe(true); - expect(defaultElementFactory(ModelKind.node, '') instanceof BaseNode).toBe(true); - expect(defaultElementFactory(ModelKind.edge, '') instanceof BaseEdge).toBe(true); - }); -}); diff --git a/packages/react-topology/src/elements/defaultElementFactory.ts b/packages/react-topology/src/elements/defaultElementFactory.ts deleted file mode 100644 index d86ab9a4228..00000000000 --- a/packages/react-topology/src/elements/defaultElementFactory.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ElementFactory, GraphElement, ModelKind } from '../types'; -import BaseEdge from './BaseEdge'; -import BaseGraph from './BaseGraph'; -import BaseNode from './BaseNode'; - -const defaultElementFactory: ElementFactory = (kind: ModelKind): GraphElement | undefined => { - switch (kind) { - case ModelKind.graph: - return new BaseGraph(); - case ModelKind.node: - return new BaseNode(); - case ModelKind.edge: - return new BaseEdge(); - default: - return undefined; - } -}; - -export default defaultElementFactory; diff --git a/packages/react-topology/src/elements/index.ts b/packages/react-topology/src/elements/index.ts deleted file mode 100644 index 8955e32b127..00000000000 --- a/packages/react-topology/src/elements/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { default as BaseEdge } from './BaseEdge'; -export { default as BaseElement } from './BaseElement'; -export { default as BaseGraph } from './BaseGraph'; -export { default as BaseNode } from './BaseNode'; -export { default as defaultElementFactory } from './defaultElementFactory'; diff --git a/packages/react-topology/src/geom/Dimensions.ts b/packages/react-topology/src/geom/Dimensions.ts deleted file mode 100644 index 13e37c2fef6..00000000000 --- a/packages/react-topology/src/geom/Dimensions.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { DimensionsIface } from './types'; - -export default class Dimensions implements DimensionsIface { - static readonly EMPTY = new Dimensions(); - - width: number = 0; - - height: number = 0; - - private static SINGLETON = new Dimensions(); - - static singleUse(width: number = 0, height: number = 0) { - Dimensions.SINGLETON.width = width; - Dimensions.SINGLETON.height = height; - return Dimensions.SINGLETON; - } - - static fromDimensions(dimension: DimensionsIface): Dimensions { - return new Dimensions(dimension.width, dimension.height); - } - - constructor(width: number = 0, height: number = 0) { - this.width = width; - this.height = height; - } - - isEmpty(): boolean { - return this.width <= 0 || this.height <= 0; - } - - setSize(w: number, h: number): Dimensions { - this.width = w; - this.height = h; - return this; - } - - scale(scaleX: number, scaleY?: number): Dimensions { - const sy = scaleY != null ? scaleY : scaleX; - this.width *= scaleX; - this.height *= sy; - return this; - } - - resize(dw: number, dh: number): Dimensions { - this.width += dw; - this.height += dh; - return this; - } - - expand(h: number, v: number): Dimensions { - this.height += v * 2; - this.width += h * 2; - return this; - } - - clone(): Dimensions { - return Dimensions.fromDimensions(this); - } - - equals(r: DimensionsIface) { - return r.width === this.width && r.height === this.height; - } -} diff --git a/packages/react-topology/src/geom/Point.ts b/packages/react-topology/src/geom/Point.ts deleted file mode 100644 index 9f3ec753b7e..00000000000 --- a/packages/react-topology/src/geom/Point.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { Translatable, PointIface } from './types'; - -export default class Point implements Translatable, PointIface { - static readonly EMPTY = new Point(); - - x: number; - - y: number; - - private static SINGLETON = new Point(); - - static singleUse(x: number = 0, y: number = 0) { - Point.SINGLETON.x = x; - Point.SINGLETON.y = y; - return Point.SINGLETON; - } - - static fromPoint(point: PointIface): Point { - return new Point(point.x, point.y); - } - - constructor(x: number = 0, y: number = 0) { - this.x = x; - this.y = y; - } - - setLocation(x: number, y: number): Point { - this.x = x; - this.y = y; - return this; - } - - negate(): Point { - this.x = -this.x; - this.y = -this.y; - return this; - } - - translate(dx: number, dy: number): Point { - this.x += dx; - this.y += dy; - return this; - } - - scale(scaleX: number, scaleY?: number): Point { - this.x *= scaleX; - this.y *= scaleY != null ? scaleY : scaleX; - return this; - } - - clone(): Point { - return Point.fromPoint(this); - } - - equals(p: PointIface) { - return p.x === this.x && p.y === this.y; - } -} diff --git a/packages/react-topology/src/geom/Rect.ts b/packages/react-topology/src/geom/Rect.ts deleted file mode 100644 index 94a5a2ab29c..00000000000 --- a/packages/react-topology/src/geom/Rect.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { Padding, Translatable, RectIface } from './types'; -import Point from './Point'; - -export default class Rect implements Translatable, RectIface { - static readonly EMPTY = new Rect(); - - width: number = 0; - - height: number = 0; - - x: number = 0; - - y: number = 0; - - private static SINGLETON = new Rect(); - - static singleUse(x: number = 0, y: number = 0, width: number = 0, height: number = 0) { - Rect.SINGLETON.x = x; - Rect.SINGLETON.y = y; - Rect.SINGLETON.width = width; - Rect.SINGLETON.height = height; - return Rect.SINGLETON; - } - - static fromRect(rect: RectIface): Rect { - return new Rect(rect.x, rect.y, rect.width, rect.height); - } - - constructor(x: number = 0, y: number = 0, width: number = 0, height: number = 0) { - this.x = x; - this.y = y; - this.width = width; - this.height = height; - } - - isEmpty(): boolean { - return this.width <= 0 || this.height <= 0; - } - - setLocation(x: number, y: number): Rect { - this.x = x; - this.y = y; - return this; - } - - setSize(w: number, h: number): Rect { - this.width = w; - this.height = h; - return this; - } - - getCenter(): Point { - return new Point(this.x + this.width / 2, this.y + this.height / 2); - } - - setCenter(x: number, y: number): Rect { - this.x = x - this.width / 2; - this.y = y - this.height / 2; - return this; - } - - translate(dx: number, dy: number): Rect { - this.x += dx; - this.y += dy; - return this; - } - - scale(scaleX: number, scaleY?: number): Rect { - const sy = scaleY != null ? scaleY : scaleX; - const xx = this.x; - const yy = this.y; - this.x *= scaleX; - this.y *= sy; - this.width = (xx + this.width) * scaleX - this.x; - this.height = (yy + this.height) * sy - this.y; - return this; - } - - resize(dw: number, dh: number): Rect { - this.width += dw; - this.height += dh; - return this; - } - - bottom(): number { - return this.y + this.height; - } - - right(): number { - return this.x + this.width; - } - - union({ x, y, width, height }: Rect): Rect { - const right = Math.max(this.x + this.width, x + width); - const bottom = Math.max(this.y + this.height, y + height); - this.x = Math.min(this.x, x); - this.y = Math.min(this.y, y); - this.width = right - this.x; - this.height = bottom - this.y; - return this; - } - - expand(h: number, v: number): Rect { - this.y -= v; - this.height += v * 2; - this.x -= h; - this.width += h * 2; - return this; - } - - // - // Padding Format: [all], [vertical, horizontal], [top, horizontal, bottom], [top, right, bottom, left] - // - padding(padding?: Padding): Rect { - if (padding) { - if (typeof padding === 'number') { - this.expand(padding, padding); - } else if (padding.length === 1) { - this.expand(padding[0], padding[0]); - } else if (padding.length === 2) { - this.expand(padding[1], padding[0]); - } else if (padding.length === 3) { - this.y -= padding[0]; - this.height += padding[0] + padding[2]; - this.width += padding[1]; - } else if (padding.length === 4) { - this.y -= padding[0]; - this.height += padding[0] + padding[2]; - this.x -= padding[1]; - this.width += padding[1] + padding[3]; - } - } - return this; - } - - setBounds(x: number, y: number, width: number, height: number): Rect { - this.x = x; - this.y = y; - this.width = width; - this.height = height; - return this; - } - - clone(): Rect { - return Rect.fromRect(this); - } - - equals(r: RectIface) { - return r.x === this.x && r.y === this.y && r.width === this.width && r.height === this.height; - } -} diff --git a/packages/react-topology/src/geom/__tests__/Dimensions.spec.ts b/packages/react-topology/src/geom/__tests__/Dimensions.spec.ts deleted file mode 100644 index e7c08199ea7..00000000000 --- a/packages/react-topology/src/geom/__tests__/Dimensions.spec.ts +++ /dev/null @@ -1,75 +0,0 @@ -import Dimensions from '../Dimensions'; - -describe('Dimensions', () => { - it('should provide an empty instance', () => { - expect(Dimensions.EMPTY).toEqual({ width: 0, height: 0 }); - }); - - it('should re-use single use instance', () => { - expect(Dimensions.singleUse()).toBe(Dimensions.singleUse()); - expect(Dimensions.singleUse()).toEqual({ width: 0, height: 0 }); - expect(Dimensions.singleUse(1)).toEqual({ width: 1, height: 0 }); - expect(Dimensions.singleUse(1, 2)).toEqual({ width: 1, height: 2 }); - }); - - it('should create a new Dimensions from existing Dimensions', () => { - const d1 = new Dimensions(5, 10); - const d2 = Dimensions.fromDimensions(d1); - expect(d1).not.toBe(d2); - expect(d1).toEqual(d2); - }); - - it('should create a Dimensions', () => { - expect(new Dimensions()).toEqual({ width: 0, height: 0 }); - expect(new Dimensions(1)).toEqual({ width: 1, height: 0 }); - expect(new Dimensions(1, 2)).toEqual({ width: 1, height: 2 }); - }); - - it('should be empty if no height or width', () => { - expect(new Dimensions().isEmpty()).toBe(true); - expect(new Dimensions(1, 0).isEmpty()).toBe(true); - expect(new Dimensions(0, 1).isEmpty()).toBe(true); - expect(new Dimensions(1, 1).isEmpty()).toBe(false); - }); - - it('should set size', () => { - const d = new Dimensions(8, 9); - expect(d.setSize(2, 3)).toBe(d); - expect(d).toEqual({ width: 2, height: 3 }); - }); - - it('should scale Dimensions', () => { - const d = new Dimensions(4, 6); - expect(d.scale(2)).toBe(d); - expect(d).toEqual({ width: 8, height: 12 }); - d.scale(0.5, 2); - expect(d).toEqual({ width: 4, height: 24 }); - }); - - it('should resize the Dimensions', () => { - const d = new Dimensions(8, 9); - expect(d.resize(2, 3)).toBe(d); - expect(d).toEqual({ width: 10, height: 12 }); - }); - - it('should expand the Dimensions in size', () => { - const d = new Dimensions(8, 9); - expect(d.expand(4, 5)).toBe(d); - expect(d).toEqual({ width: 16, height: 19 }); - }); - - it('should clone Dimensions', () => { - const d1 = new Dimensions(5, 10); - const d2 = d1.clone(); - expect(d1).not.toBe(d2); - expect(d1).toEqual(d2); - }); - - it('should check Dimensions equality', () => { - const d1 = new Dimensions(5, 10); - const d2 = new Dimensions(5, 10); - const d3 = new Dimensions(1, 2); - expect(d1.equals(d2)).toBe(true); - expect(d1.equals(d3)).toBe(false); - }); -}); diff --git a/packages/react-topology/src/geom/__tests__/Point.spec.ts b/packages/react-topology/src/geom/__tests__/Point.spec.ts deleted file mode 100644 index aba006ce8ca..00000000000 --- a/packages/react-topology/src/geom/__tests__/Point.spec.ts +++ /dev/null @@ -1,68 +0,0 @@ -import Point from '../Point'; - -describe('Point', () => { - it('should provide an empty instance', () => { - expect(Point.EMPTY).toEqual({ x: 0, y: 0 }); - }); - - it('should re-use single use instance', () => { - expect(Point.singleUse()).toBe(Point.singleUse()); - expect(Point.singleUse()).toEqual({ x: 0, y: 0 }); - expect(Point.singleUse(1)).toEqual({ x: 1, y: 0 }); - expect(Point.singleUse(1, 2)).toEqual({ x: 1, y: 2 }); - }); - - it('should create a new Point from existing Point', () => { - const p1 = new Point(5, 10); - const p2 = Point.fromPoint(p1); - expect(p1).not.toBe(p2); - expect(p1).toEqual(p2); - }); - - it('should create a Point', () => { - expect(new Point()).toEqual({ x: 0, y: 0 }); - expect(new Point(1)).toEqual({ x: 1, y: 0 }); - expect(new Point(1, 2)).toEqual({ x: 1, y: 2 }); - }); - - it('should set location', () => { - const p = new Point(5, 10); - expect(p.setLocation(2, 3)).toBe(p); - expect(p).toEqual({ x: 2, y: 3 }); - }); - - it('should negate point', () => { - const p = new Point(5, 10); - expect(p.negate()).toBe(p); - expect(p).toEqual({ x: -5, y: -10 }); - }); - - it('should translate point', () => { - const p = new Point(5, 10); - expect(p.translate(2, 3)).toBe(p); - expect(p).toEqual({ x: 7, y: 13 }); - }); - - it('should scale point', () => { - const p = new Point(5, 10); - expect(p.scale(2)).toBe(p); - expect(p).toEqual({ x: 10, y: 20 }); - p.scale(1.5, 2); - expect(p).toEqual({ x: 15, y: 40 }); - }); - - it('should clone point', () => { - const p1 = new Point(5, 10); - const p2 = p1.clone(); - expect(p1).not.toBe(p2); - expect(p1).toEqual(p2); - }); - - it('should check point equality', () => { - const p1 = new Point(5, 10); - const p2 = new Point(5, 10); - const p3 = new Point(1, 2); - expect(p1.equals(p2)).toBe(true); - expect(p1.equals(p3)).toBe(false); - }); -}); diff --git a/packages/react-topology/src/geom/__tests__/Rect.spec.ts b/packages/react-topology/src/geom/__tests__/Rect.spec.ts deleted file mode 100644 index 9c80e8396eb..00000000000 --- a/packages/react-topology/src/geom/__tests__/Rect.spec.ts +++ /dev/null @@ -1,135 +0,0 @@ -import Rect from '../Rect'; - -describe('Rect', () => { - it('should provide an empty instance', () => { - expect(Rect.EMPTY).toEqual({ x: 0, y: 0, width: 0, height: 0 }); - }); - - it('should re-use single use instance', () => { - expect(Rect.singleUse()).toBe(Rect.singleUse()); - expect(Rect.singleUse()).toEqual({ x: 0, y: 0, width: 0, height: 0 }); - expect(Rect.singleUse(1)).toEqual({ x: 1, y: 0, width: 0, height: 0 }); - expect(Rect.singleUse(1, 2)).toEqual({ x: 1, y: 2, width: 0, height: 0 }); - expect(Rect.singleUse(1, 2, 3)).toEqual({ x: 1, y: 2, width: 3, height: 0 }); - expect(Rect.singleUse(1, 2, 3, 4)).toEqual({ x: 1, y: 2, width: 3, height: 4 }); - }); - - it('should create a new Rect from existing Rect', () => { - const r1 = new Rect(5, 10, 2, 4); - const r2 = Rect.fromRect(r1); - expect(r1).not.toBe(r2); - expect(r1).toEqual(r2); - }); - - it('should create a Rect', () => { - expect(new Rect()).toEqual({ x: 0, y: 0, width: 0, height: 0 }); - expect(new Rect(1)).toEqual({ x: 1, y: 0, width: 0, height: 0 }); - expect(new Rect(1, 2, 3)).toEqual({ x: 1, y: 2, width: 3, height: 0 }); - expect(new Rect(1, 2, 3, 4)).toEqual({ x: 1, y: 2, width: 3, height: 4 }); - }); - - it('should be empty if no height or width', () => { - expect(new Rect().isEmpty()).toBe(true); - expect(new Rect(0, 0, 1, 0).isEmpty()).toBe(true); - expect(new Rect(0, 0, 0, 1).isEmpty()).toBe(true); - expect(new Rect(0, 0, 1, 1).isEmpty()).toBe(false); - }); - - it('should set location', () => { - const r = new Rect(5, 10, 8, 9); - expect(r.setLocation(2, 3)).toBe(r); - expect(r).toEqual({ x: 2, y: 3, width: 8, height: 9 }); - }); - - it('should set size', () => { - const r = new Rect(5, 10, 8, 9); - expect(r.setSize(2, 3)).toBe(r); - expect(r).toEqual({ x: 5, y: 10, width: 2, height: 3 }); - }); - - it('should set center', () => { - const r = new Rect(6, 10, 20, 30); - expect(r.setCenter(10, 30)).toBe(r); - expect(r).toEqual({ x: 0, y: 15, width: 20, height: 30 }); - }); - - it('should get center', () => { - const r = new Rect(6, 10, 10, 16); - expect(r.getCenter()).toEqual({ x: 11, y: 18 }); - }); - - it('should translate Rect', () => { - const r = new Rect(5, 10, 3, 4); - expect(r.translate(2, 3)).toBe(r); - expect(r).toEqual({ x: 7, y: 13, width: 3, height: 4 }); - }); - - it('should scale Rect', () => { - const r = new Rect(5, 10, 4, 6); - expect(r.scale(2)).toBe(r); - expect(r).toEqual({ x: 10, y: 20, width: 8, height: 12 }); - r.scale(0.5, 2); - expect(r).toEqual({ x: 5, y: 40, width: 4, height: 24 }); - }); - - it('should resize the Rect ', () => { - const r = new Rect(5, 10, 8, 9); - expect(r.resize(2, 3)).toBe(r); - expect(r).toEqual({ x: 5, y: 10, width: 10, height: 12 }); - }); - - it('should get the bottom y coordinate', () => { - const r = new Rect(5, 10, 8, 9); - expect(r.bottom()).toBe(19); - }); - - it('should get the right x coordinate', () => { - const r = new Rect(5, 10, 8, 9); - expect(r.right()).toBe(13); - }); - - it('should expand the Rect to enclose another Rect', () => { - const r = new Rect(5, 10, 8, 9); - expect(r.union(new Rect(2, 12, 4, 27))).toBe(r); - expect(r).toEqual({ x: 2, y: 10, width: 11, height: 29 }); - }); - - it('should expand the Rect in size', () => { - const r = new Rect(5, 10, 8, 9); - expect(r.expand(4, 5)).toBe(r); - expect(r).toEqual({ x: 1, y: 5, width: 16, height: 19 }); - }); - - it('should set padding according to css shorthand rules', () => { - const r = new Rect(5, 10, 8, 9); - expect(r.padding()).toBe(r); - expect(r.padding()).toEqual({ x: 5, y: 10, width: 8, height: 9 }); - expect(r.padding(undefined)).toEqual({ x: 5, y: 10, width: 8, height: 9 }); - expect(r.clone().padding(5)).toEqual({ x: 0, y: 5, width: 18, height: 19 }); - expect(r.clone().padding([5])).toEqual({ x: 0, y: 5, width: 18, height: 19 }); - expect(r.clone().padding([5, 2])).toEqual({ x: 3, y: 5, width: 12, height: 19 }); - expect(r.clone().padding([5, 2, 4])).toEqual({ x: 5, y: 5, width: 10, height: 18 }); - expect(r.clone().padding([5, 2, 4, 6])).toEqual({ x: 3, y: 5, width: 16, height: 18 }); - }); - - it('should set bounds', () => { - const r = new Rect(5, 10, 8, 9); - expect(r.setBounds(2, 3, 6, 7)).toBe(r); - expect(r).toEqual({ x: 2, y: 3, width: 6, height: 7 }); - }); - - it('should clone Rect', () => { - const r1 = new Rect(5, 10); - const r2 = r1.clone(); - expect(r1).not.toBe(r2); - expect(r1).toEqual(r2); - }); - - it('should check Rect equality', () => { - const r1 = new Rect(5, 10, 1, 2); - const r2 = new Rect(5, 10, 1, 2); - const r3 = new Rect(1, 2, 3, 4); - expect(r1.equals(r2)).toBe(true); - expect(r1.equals(r3)).toBe(false); - }); -}); diff --git a/packages/react-topology/src/geom/index.ts b/packages/react-topology/src/geom/index.ts deleted file mode 100644 index 653f02d5106..00000000000 --- a/packages/react-topology/src/geom/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { default as Point } from './Point'; -export { default as Rect } from './Rect'; -export { default as Dimensions } from './Dimensions'; -export * from './types'; diff --git a/packages/react-topology/src/geom/types.ts b/packages/react-topology/src/geom/types.ts deleted file mode 100644 index 406907b5375..00000000000 --- a/packages/react-topology/src/geom/types.ts +++ /dev/null @@ -1,28 +0,0 @@ -export interface Translatable { - translate(dx: number, dy: number): Translatable; - scale(s: number): Translatable; -} - -export type Padding = - | number - | [number] - | [number, number] - | [number, number, number] - | [number, number, number, number]; - -export interface PointIface { - x: number; - y: number; -} - -export interface DimensionsIface { - width: number; - height: number; -} - -export interface RectIface { - x: number; - y: number; - width: number; - height: number; -} diff --git a/packages/react-topology/src/hooks/index.ts b/packages/react-topology/src/hooks/index.ts deleted file mode 100644 index 796613955e0..00000000000 --- a/packages/react-topology/src/hooks/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export { default as useComponentFactory } from './useComponentFactory'; -export { default as useElementFactory } from './useElementFactory'; -export { default as useEventListener } from './useEventListener'; -export { default as useLayoutFactory } from './useLayoutFactory'; -export { default as useModel } from './useModel'; -export { default as useVisualizationController } from './useVisualizationController'; -export { default as useVisualizationState } from './useVisualizationState'; -export { default as useDetailsLevel } from './useDetailsLevel'; -export { default as useScaleNode } from './useScaleNode'; diff --git a/packages/react-topology/src/hooks/useComponentFactory.tsx b/packages/react-topology/src/hooks/useComponentFactory.tsx deleted file mode 100644 index 70fc4bce590..00000000000 --- a/packages/react-topology/src/hooks/useComponentFactory.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import * as React from 'react'; -import { ComponentFactory } from '../types'; -import useVisualizationController from './useVisualizationController'; - -const useComponentFactory = (factory: ComponentFactory): void => { - const controller = useVisualizationController(); - React.useEffect(() => { - controller.registerComponentFactory(factory); - // TODO support unregister? - }, [controller, factory]); -}; - -export default useComponentFactory; diff --git a/packages/react-topology/src/hooks/useDetailsLevel.tsx b/packages/react-topology/src/hooks/useDetailsLevel.tsx deleted file mode 100644 index a1985763a24..00000000000 --- a/packages/react-topology/src/hooks/useDetailsLevel.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import useVisualizationController from './useVisualizationController'; -import { ScaleDetailsLevel } from '../types'; - -const useDetailsLevel = (): ScaleDetailsLevel => { - const controller = useVisualizationController(); - if (!controller) { - return ScaleDetailsLevel.high; - } - return controller.getGraph().getDetailsLevel(); -}; - -export default useDetailsLevel; diff --git a/packages/react-topology/src/hooks/useElementFactory.tsx b/packages/react-topology/src/hooks/useElementFactory.tsx deleted file mode 100644 index 0e2001d0ac3..00000000000 --- a/packages/react-topology/src/hooks/useElementFactory.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import * as React from 'react'; -import { ElementFactory } from '../types'; -import useVisualizationController from './useVisualizationController'; - -const useElementFactory = (factory: ElementFactory): void => { - const controller = useVisualizationController(); - React.useEffect(() => { - controller.registerElementFactory(factory); - // TODO support unregister? - }, [controller, factory]); -}; - -export default useElementFactory; diff --git a/packages/react-topology/src/hooks/useEventListener.tsx b/packages/react-topology/src/hooks/useEventListener.tsx deleted file mode 100644 index 6e2c96b3fda..00000000000 --- a/packages/react-topology/src/hooks/useEventListener.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import * as React from 'react'; -import useVisualizationController from './useVisualizationController'; -import { EventListener } from '../types'; - -const useEventListener = (type: string, listener: L): void => { - const controller = useVisualizationController(); - React.useEffect(() => { - controller.addEventListener(type, listener); - return () => { - controller.removeEventListener(type, listener); - }; - }, [controller, type, listener]); -}; - -export default useEventListener; diff --git a/packages/react-topology/src/hooks/useLayoutFactory.tsx b/packages/react-topology/src/hooks/useLayoutFactory.tsx deleted file mode 100644 index fa16a5ebe8e..00000000000 --- a/packages/react-topology/src/hooks/useLayoutFactory.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import * as React from 'react'; -import { LayoutFactory } from '../types'; -import useVisualizationController from './useVisualizationController'; - -const useLayoutFactory = (factory: LayoutFactory): void => { - const controller = useVisualizationController(); - React.useEffect(() => { - controller.registerLayoutFactory(factory); - // TODO support unregister? - }, [controller, factory]); -}; - -export default useLayoutFactory; diff --git a/packages/react-topology/src/hooks/useModel.tsx b/packages/react-topology/src/hooks/useModel.tsx deleted file mode 100644 index 2f95986549f..00000000000 --- a/packages/react-topology/src/hooks/useModel.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import * as React from 'react'; -import useVisualizationController from './useVisualizationController'; -import { Model } from '../types'; - -const useModel = (model: Model): void => { - const controller = useVisualizationController(); - - React.useEffect(() => { - controller.fromModel(model); - }, [controller, model]); -}; - -export default useModel; diff --git a/packages/react-topology/src/hooks/useScaleNode.tsx b/packages/react-topology/src/hooks/useScaleNode.tsx deleted file mode 100644 index 9bec3ac5cfb..00000000000 --- a/packages/react-topology/src/hooks/useScaleNode.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import * as React from 'react'; - -const useScaleNode = (scaleNode: boolean, scale: number, scaleUpTime: number = 200): number => { - const [nodeScale, setNodeScale] = React.useState(1); - const animationRef = React.useRef(); - const scaleGoal = React.useRef(1); - const nodeScaled = React.useRef(false); - - React.useEffect(() => { - if (!scaleNode || scale >= 1) { - setNodeScale(1); - nodeScaled.current = false; - if (animationRef.current) { - window.cancelAnimationFrame(animationRef.current); - animationRef.current = 0; - } - } else { - scaleGoal.current = 1 / scale; - const scaleDelta = scaleGoal.current - scale; - const initTime = performance.now(); - - const bumpScale = (bumpTime: number) => { - const scalePercent = (bumpTime - initTime) / scaleUpTime; - const nextScale = Math.min(scale + scaleDelta * scalePercent, scaleGoal.current); - setNodeScale(nextScale); - if (nextScale < scaleGoal.current) { - animationRef.current = window.requestAnimationFrame(bumpScale); - } else { - nodeScaled.current = true; - animationRef.current = 0; - } - }; - - if (nodeScaled.current) { - setNodeScale(scaleGoal.current); - } else if (!animationRef.current) { - animationRef.current = window.requestAnimationFrame(bumpScale); - } - } - return () => { - if (animationRef.current) { - window.cancelAnimationFrame(animationRef.current); - animationRef.current = 0; - } - }; - }, [scale, scaleNode, scaleUpTime]); - - return nodeScale; -}; -export default useScaleNode; diff --git a/packages/react-topology/src/hooks/useVisualizationController.tsx b/packages/react-topology/src/hooks/useVisualizationController.tsx deleted file mode 100644 index aee4353910a..00000000000 --- a/packages/react-topology/src/hooks/useVisualizationController.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import * as React from 'react'; -import { ControllerContext } from '../utils'; -import { Controller } from '../types'; - -const useVisualizationController = (): Controller => React.useContext(ControllerContext); - -export default useVisualizationController; diff --git a/packages/react-topology/src/hooks/useVisualizationState.tsx b/packages/react-topology/src/hooks/useVisualizationState.tsx deleted file mode 100644 index 24f064810fa..00000000000 --- a/packages/react-topology/src/hooks/useVisualizationState.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import * as React from 'react'; -import { reaction } from 'mobx'; -import useVisualizationController from './useVisualizationController'; - -const useVisualizationState = (key: string, initialState?: S): [S, (value: S) => void] => { - const keyRef = React.useRef(key); - if (keyRef.current !== key) { - throw new Error(`State key change disallowed: ${keyRef.current} => ${key}`); - } - - const [state, setState] = React.useState(initialState); - const controller = useVisualizationController(); - - const setControllerState = React.useCallback( - (value?: S): void => { - controller.setState({ [keyRef.current]: value }); - }, - [controller] - ); - - React.useEffect(() => { - // init the controller state - setControllerState(initialState); - - // sync controller state and react state such that the component is re-rendered when controller state changes - return reaction( - () => controller.getState()[keyRef.current], - (value: S) => { - setState(value); - } - ); - - // we only want to set the initial state once - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [controller]); - - return [state, setControllerState]; -}; - -export default useVisualizationState; diff --git a/packages/react-topology/src/index.ts b/packages/react-topology/src/index.ts deleted file mode 100644 index aa256a654d2..00000000000 --- a/packages/react-topology/src/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -export * from './components'; -export * from './anchors'; -export * from './behavior'; -export * from './const'; -export * from './elements'; -export * from './geom'; -export * from './hooks'; -export * from './layouts'; -export * from './utils'; -export * from './mobx-exports'; -export * from './types'; -export * from './pipelines'; -export { Visualization } from './Visualization'; diff --git a/packages/react-topology/src/layouts/BaseLayout.ts b/packages/react-topology/src/layouts/BaseLayout.ts deleted file mode 100644 index f31f514c1d6..00000000000 --- a/packages/react-topology/src/layouts/BaseLayout.ts +++ /dev/null @@ -1,484 +0,0 @@ -import * as _ from 'lodash'; -import { action } from 'mobx'; -import { - Edge, - Graph, - Layout, - Node, - ADD_CHILD_EVENT, - REMOVE_CHILD_EVENT, - GRAPH_LAYOUT_END_EVENT, - ElementChildEventListener, - NODE_COLLAPSE_CHANGE_EVENT, - NodeCollapseChangeEventListener, - ElementVisibilityChangeEventListener, - ELEMENT_VISIBILITY_CHANGE_EVENT, - ElementVisibilityChangeEvent, - isNode -} from '../types'; -import { leafNodeElements, groupNodeElements, getClosestVisibleParent } from '../utils'; -import { - DRAG_MOVE_OPERATION, - DRAG_NODE_END_EVENT, - DRAG_NODE_START_EVENT, - DragEvent, - DragNodeEventListener, - DragOperationWithType -} from '../behavior'; -import { BaseEdge } from '../elements'; -import { ForceSimulation } from './ForceSimulation'; -import { LayoutNode } from './LayoutNode'; -import { LayoutGroup } from './LayoutGroup'; -import { LayoutLink } from './LayoutLink'; -import { LayoutOptions } from './LayoutOptions'; - -export const LAYOUT_DEFAULTS: LayoutOptions = { - linkDistance: 60, - nodeDistance: 35, - groupDistance: 35, - collideDistance: 0, - simulationSpeed: 10, - chargeStrength: 0, - allowDrag: true, - layoutOnDrag: true -}; -export class BaseLayout implements Layout { - protected readonly graph: Graph; - - protected forceSimulation: ForceSimulation; - - protected options: LayoutOptions; - - protected scheduleHandle?: number; - - private scheduleRestart = false; - - protected nodes: LayoutNode[] = []; - - protected edges: LayoutLink[] = []; - - protected groups: LayoutGroup[] = []; - - protected nodesMap: { [id: string]: LayoutNode } = {}; - - constructor(graph: Graph, options?: Partial) { - this.graph = graph; - this.options = { - ...LAYOUT_DEFAULTS, - onSimulationEnd: this.onSimulationEnd, - ...options - }; - - if (this.options.allowDrag) { - graph - .getController() - .addEventListener(DRAG_NODE_START_EVENT, this.handleDragStart) - .addEventListener(DRAG_NODE_END_EVENT, this.handleDragEnd); - } - - this.forceSimulation = new ForceSimulation(this.options); - this.startListening(); - } - - protected onSimulationEnd = () => {}; - - destroy(): void { - if (this.options.allowDrag) { - this.graph - .getController() - .removeEventListener(DRAG_NODE_START_EVENT, this.handleDragStart) - .removeEventListener(DRAG_NODE_END_EVENT, this.handleDragEnd); - } - - this.stopListening(); - - this.forceSimulation.destroy(); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - protected initDrag(element: Node, event: DragEvent, operation: DragOperationWithType): void {} - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - protected endDrag(element: Node, event: DragEvent, operation: DragOperationWithType): void {} - - handleDragStart = (element: Node, event: DragEvent, operation: DragOperationWithType) => { - this.initDrag(element, event, operation); - - if (!this.options.layoutOnDrag) { - return; - } - - if (operation.type !== DRAG_MOVE_OPERATION) { - this.forceSimulation.stopSimulation(); - return; - } - - const id = element.getId(); - let found = false; - const dragNode: LayoutNode | undefined = this.nodes.find((node: LayoutNode) => node.id === id); - if (dragNode) { - dragNode.isFixed = true; - found = true; - } else { - const dragGroup: LayoutGroup | undefined = this.groups.find((group: LayoutGroup) => group.id === id); - if (dragGroup) { - const groupNodes = dragGroup.leaves; - groupNodes.forEach((node: LayoutNode) => { - node.isFixed = true; - }); - found = true; - } - } - - if (found) { - this.forceSimulation.alphaTarget(0.1); - this.forceSimulation.restart(); - } - }; - - handleDragEnd = (element: Node, event: DragEvent, operation: DragOperationWithType) => { - this.endDrag(element, event, operation); - - if (!this.options.layoutOnDrag) { - return; - } - - if (operation.type !== DRAG_MOVE_OPERATION) { - this.forceSimulation.restart(); - return; - } - - const id = element.getId(); - const dragNode: LayoutNode | undefined = this.nodes.find((node: LayoutNode) => node.id === id); - if (dragNode) { - dragNode.isFixed = false; - } else { - const dragGroup: LayoutGroup | undefined = this.groups.find((group: LayoutGroup) => group.id === id); - if (dragGroup) { - const groupNodes = dragGroup.leaves; - groupNodes.forEach((node: LayoutNode) => { - node.isFixed = false; - }); - } - } - this.forceSimulation.alphaTarget(0); - }; - - layout = () => { - this.stopListening(); - - this.runLayout(true); - - this.startListening(); - }; - - private startListening(): void { - const controller = this.graph.getController(); - if (controller) { - controller.addEventListener(ADD_CHILD_EVENT, this.handleChildAdded); - controller.addEventListener(REMOVE_CHILD_EVENT, this.handleChildRemoved); - controller.addEventListener(ELEMENT_VISIBILITY_CHANGE_EVENT, this.handleElementVisibilityChange); - controller.addEventListener(NODE_COLLAPSE_CHANGE_EVENT, this.handleNodeCollapse); - } - } - - stop(): void { - this.stopSimulation(); - } - - private stopListening(): void { - const controller = this.graph.getController(); - if (this.scheduleHandle) { - window.cancelAnimationFrame(this.scheduleHandle); - } - if (controller) { - controller.removeEventListener(ADD_CHILD_EVENT, this.handleChildAdded); - controller.removeEventListener(REMOVE_CHILD_EVENT, this.handleChildRemoved); - controller.removeEventListener(ELEMENT_VISIBILITY_CHANGE_EVENT, this.handleElementVisibilityChange); - controller.removeEventListener(NODE_COLLAPSE_CHANGE_EVENT, this.handleNodeCollapse); - } - } - - protected handleChildAdded: ElementChildEventListener = ({ child }): void => { - if (!this.nodesMap[child.getId()]) { - this.scheduleRestart = true; - this.scheduleLayout(); - } - }; - - protected handleChildRemoved: ElementChildEventListener = ({ child }): void => { - if (this.nodesMap[child.getId()]) { - this.scheduleRestart = true; - this.scheduleLayout(); - } - }; - - protected handleElementVisibilityChange: ElementVisibilityChangeEventListener = ( - event: ElementVisibilityChangeEvent - ): void => { - if (event.visible === (this.nodesMap[event.target.getId()] === undefined)) { - this.scheduleRestart = true; - this.scheduleLayout(); - } - }; - - private handleNodeCollapse: NodeCollapseChangeEventListener = ({ node }): void => { - if (!node.isCollapsed()) { - this.scheduleRestart = true; - this.scheduleLayout(); - } - }; - - private scheduleLayout = (): void => { - if (!this.scheduleHandle) { - this.scheduleHandle = window.requestAnimationFrame(() => { - delete this.scheduleHandle; - try { - this.runLayout(false, this.scheduleRestart); - this.scheduleRestart = false; - // eslint-disable-next-line no-empty - } catch (e) {} - }); - } - }; - - protected getFixedNodeDistance = (link: any): number => - Math.sqrt((link.sourceNode.x - link.targetNode.x) ** 2 + (link.sourceNode.y - link.targetNode.y) ** 2); - - protected getLayoutNode(nodes: LayoutNode[], node: Node | null): LayoutNode | undefined { - if (!node) { - return undefined; - } - - let layoutNode = _.find(nodes, { id: node.getId() }); - if (!layoutNode && _.size(node.getNodes())) { - layoutNode = _.find(nodes, { id: node.getChildren()[0].getId() }); - } - if (!layoutNode) { - layoutNode = this.getLayoutNode(nodes, getClosestVisibleParent(node)); - } - - return layoutNode; - } - - // Faux Edges are used to layout nodes in a group together, as if they had links between them - protected getFauxEdges(groups: LayoutGroup[], nodes: LayoutNode[]): LayoutLink[] { - const fauxEdges: LayoutLink[] = []; - groups.forEach((group: LayoutGroup) => { - const groupNodes = group.element.getNodes(); - for (let i = 0; i < groupNodes.length; i++) { - for (let j = i + 1; j < groupNodes.length; j++) { - const fauxEdge = new BaseEdge(); - const source = this.getLayoutNode(nodes, groupNodes[i]); - const target = this.getLayoutNode(nodes, groupNodes[j]); - if (source && target) { - const link = this.createLayoutLink(fauxEdge, source, target, true); - fauxEdge.setController(target.element.getController()); - fauxEdges.push(link); - } - } - } - }); - - return fauxEdges; - } - - protected createLayoutNode(node: Node, nodeDistance: number, index: number) { - return new LayoutNode(node, nodeDistance, index); - } - - protected createLayoutLink(edge: Edge, source: LayoutNode, target: LayoutNode, isFalse: boolean = false): LayoutLink { - return new LayoutLink(edge, source, target, isFalse); - } - - protected createLayoutGroup(node: Node, padding: number, index: number) { - return new LayoutGroup(node, padding, index); - } - - protected getNodes(leafNodes: Node[], nodeDistance: number): LayoutNode[] { - return leafNodes.map((n, index) => this.createLayoutNode(n, nodeDistance, index)); - } - - // Default is to clear any initial bend points - protected initializeEdgeBendpoints = (edge: Edge): void => { - // remove any bendpoints - if (edge.getBendpoints().length > 0) { - edge.setBendpoints([]); - } - }; - - protected getLeafNodes = (): Node[] => leafNodeElements(this.graph.getNodes()).filter(n => n.isVisible()); - - protected getGroupNodes = (): Node[] => groupNodeElements(this.graph.getNodes()).filter(g => g.isVisible()); - - protected getLinks(edges: Edge[]): LayoutLink[] { - const links: LayoutLink[] = []; - edges.forEach(e => { - const source = this.getLayoutNode(this.nodes, e.getSource()); - const target = this.getLayoutNode(this.nodes, e.getTarget()); - if (source && target) { - this.initializeEdgeBendpoints(e); - links.push(this.createLayoutLink(e, source, target)); - } - }); - - return links; - } - - protected hasVisibleChildren = (group: Node): boolean => !!group.getNodes().find(c => isNode(c) && c.isVisible()); - - // Turn empty groups into nodes - protected getNodesFromGroups(groups: Node[], nodeDistance: number, nodeCount: number): LayoutNode[] { - let count = 0; - const groupNodes: LayoutNode[] = []; - groups.forEach((group: Node) => { - if (!this.hasVisibleChildren(group)) { - groupNodes.push(this.createLayoutNode(group, nodeDistance, nodeCount + count++)); - } - }); - - return groupNodes; - } - - protected getGroups(groups: Node[], nodes: LayoutNode[], padding: number): LayoutGroup[] { - let nodeIndex = 2 * nodes.length; - // Create groups only for those with children - const layoutGroups: LayoutGroup[] = groups - .filter(g => this.hasVisibleChildren(g)) - .map((group: Node) => this.createLayoutGroup(group, padding, nodeIndex++)); - - layoutGroups.forEach((groupNode: LayoutGroup) => { - const leaves: LayoutNode[] = []; - const leafElements = groupNode.element - .getNodes() - .filter((node: any) => !node.isGroup() || !this.hasVisibleChildren(node)); - leafElements.forEach((leaf: any) => { - const layoutLeaf = nodes.find(n => n.id === leaf.getId()); - if (layoutLeaf) { - leaves.push(layoutLeaf); - layoutLeaf.parent = groupNode; - } - }); - groupNode.leaves = leaves; - const childGroups: LayoutGroup[] = []; - const groupElements = groupNode.element - .getNodes() - .filter((node: any) => node.isGroup() && node.isVisible() && !node.isCollapsed()); - groupElements.forEach((group: any) => { - const layoutGroup = layoutGroups.find(g => g.id === group.getId()); - if (layoutGroup) { - childGroups.push(layoutGroup); - layoutGroup.parent = groupNode; - } - }); - groupNode.groups = childGroups; - }); - - return layoutGroups; - } - - protected initializeNodePositions(nodes: LayoutNode[], graph: Graph, force: boolean): void { - const { width, height } = graph.getBounds(); - const cx = width / 2; - const cy = height / 2; - - nodes.forEach((node: LayoutNode) => { - // only init position for nodes that have not been positioned - if (force || !node.element.isPositioned()) { - node.setPosition(cx, cy); - } else { - node.setFixed(true); - } - }); - } - - protected setupLayout( - graph: Graph, // eslint-disable-line @typescript-eslint/no-unused-vars - nodes: LayoutNode[], // eslint-disable-line @typescript-eslint/no-unused-vars - edges: LayoutLink[], // eslint-disable-line @typescript-eslint/no-unused-vars - groups: LayoutGroup[] // eslint-disable-line @typescript-eslint/no-unused-vars - ): void {} - - protected stopSimulation(): void { - this.forceSimulation.haltForceSimulation(); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - protected startLayout(graph: Graph, initialRun: boolean, addingNodes: boolean, onEnd?: () => void): void {} - - // Interim, remove and update startLayout to public in next breaking change build - public doStartLayout(graph: Graph, initialRun: boolean, addingNodes: boolean, onEnd?: () => void): void { - return this.startLayout(graph, initialRun, addingNodes, onEnd); - } - - protected updateLayout(): void { - this.forceSimulation.useForceSimulation(this.nodes, this.edges, this.getFixedNodeDistance); - this.forceSimulation.alpha(0.2); - } - - @action - private runLayout(initialRun: boolean, restart = true): void { - const prevGroups = this.groups; - - // create datum - const leafNodes = this.getLeafNodes(); - const groups = this.getGroupNodes(); - - this.nodes = this.getNodes(leafNodes, this.options.nodeDistance); - - const groupNodes: LayoutNode[] = this.getNodesFromGroups(groups, this.options.nodeDistance, this.nodes.length); - if (groupNodes) { - this.nodes.push(...groupNodes); - } - - this.groups = this.getGroups(groups, this.nodes, this.options.groupDistance); - - const newNodes: LayoutNode[] = initialRun - ? this.nodes - : this.nodes.filter(node => !this.nodesMap[node.element.getId()]); - let addingNodes = restart && newNodes.length > 0; - - if (!initialRun && restart && !addingNodes) { - this.groups.forEach(group => { - const prevGroup = prevGroups.find(g => g.element.getId() === group.element.getId()); - if (!prevGroup) { - addingNodes = true; - newNodes.push(...group.leaves); - } else { - group.leaves.forEach(node => { - if (!prevGroup.leaves.find(l => l.element.getId() === node.element.getId())) { - newNodes.push(node); - } - }); - } - }); - addingNodes = newNodes.length > 0; - } - - this.edges = this.getLinks(this.graph.getEdges()); - - // initialize new node positions - this.initializeNodePositions(this.nodes, this.graph, initialRun); - - // re-create the nodes map - this.nodesMap = this.nodes.reduce((acc, n) => { - acc[n.id] = n; - return acc; - }, {}); - - // Add faux edges to keep grouped items together - this.edges.push(...this.getFauxEdges(this.groups, this.nodes)); - - this.setupLayout(this.graph, this.nodes, this.edges, this.groups); - - if (initialRun || addingNodes) { - // Reset the force simulation - this.stopSimulation(); - - this.startLayout(this.graph, initialRun, addingNodes); - } else if (restart && this.options.layoutOnDrag) { - this.updateLayout(); - } - this.graph.getController().fireEvent(GRAPH_LAYOUT_END_EVENT, { graph: this.graph }); - } -} diff --git a/packages/react-topology/src/layouts/BreadthFirstGroup.ts b/packages/react-topology/src/layouts/BreadthFirstGroup.ts deleted file mode 100644 index 7ce82878f60..00000000000 --- a/packages/react-topology/src/layouts/BreadthFirstGroup.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { LayoutGroup } from './LayoutGroup'; - -export class BreadthFirstGroup extends LayoutGroup {} diff --git a/packages/react-topology/src/layouts/BreadthFirstLayout.ts b/packages/react-topology/src/layouts/BreadthFirstLayout.ts deleted file mode 100644 index 29055947883..00000000000 --- a/packages/react-topology/src/layouts/BreadthFirstLayout.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { Edge, Graph, Layout, Node } from '../types'; -import { BaseLayout } from './BaseLayout'; -import { LayoutOptions } from './LayoutOptions'; -import { LayoutNode } from './LayoutNode'; -import { LayoutLink } from './LayoutLink'; -import { BreadthFirstNode } from './BreadthFirstNode'; -import { BreadthFirstLink } from './BreadthFirstLink'; -import { BreadthFirstGroup } from './BreadthFirstGroup'; - -export type BreadthFirstLayoutOptions = LayoutOptions; - -export class BreadthFirstLayout extends BaseLayout implements Layout { - private gridOptions: BreadthFirstLayoutOptions; - - constructor(graph: Graph, options?: Partial) { - super(graph, options); - this.gridOptions = { - ...this.options, - ...options - }; - } - - protected createLayoutNode(node: Node, nodeDistance: number, index: number) { - return new BreadthFirstNode(node, nodeDistance, index); - } - - protected createLayoutLink(edge: Edge, source: LayoutNode, target: LayoutNode, isFalse: boolean): LayoutLink { - return new BreadthFirstLink(edge, source, target, isFalse); - } - - protected createLayoutGroup(node: Node, padding: number, index: number) { - return new BreadthFirstGroup(node, padding, index); - } - - protected startLayout(graph: Graph, initialRun: boolean, addingNodes: boolean): void { - if (initialRun || addingNodes) { - // Breath First algorithm - - // A node is visited in the order of levels - const visited = {}; - // A node is used as a source/target, helper to detect duplicates/cycles. - const processed = {}; - // The list of nodes that are roots in the graph - const roots = {}; - // Helper map with target Ids - const targetIds = {}; - // Helper map with the list of target Ids per source Id. - const sourceIds = {}; - - let padX = 0; - let padY = 0; - - // Initial loop to populated the helpers - for (const edge of this.edges) { - if (!edge.isFalse) { - const sourceId = edge.sourceNode.id; - const targetId = edge.targetNode.id; - if (!sourceIds[sourceId]) { - sourceIds[sourceId] = []; - } - sourceIds[sourceId].push(targetId); - targetIds[targetId] = true; - } - } - - for (const node of this.nodes) { - const id = node.id; - if (!targetIds[id]) { - roots[id] = true; - } - if (padX < node.width) { - padX = node.width; - } - if (padY < node.height) { - padY = node.height; - } - } - - // Visiting all nodes to have an array of arrays with ids, organized by breath first levels - const levels: any = []; - levels.push(Object.keys(roots)); - let nl = 0; - while (Object.keys(visited).length < this.nodes.length) { - const nextLevel = {}; - for (const nodeId of levels[nl]) { - if (!visited[nodeId]) { - if (sourceIds[nodeId]) { - for (const childId of sourceIds[nodeId]) { - if (!processed[childId]) { - nextLevel[childId] = true; - processed[childId] = true; - } - } - } - visited[nodeId] = true; - processed[nodeId] = true; - } - } - const nextLevelKeys = Object.keys(nextLevel); - if (nextLevelKeys.length > 0) { - levels.push(nextLevelKeys); - } - nl++; - } - - // Updating positions with levels - let x = 0; - let y = 0; - for (const level of levels) { - const sortedLevel = level.sort((a: string, b: string) => a.localeCompare(b)); - for (const nodeId of sortedLevel) { - const node = this.nodesMap[nodeId]; - node.x = x; - node.y = y; - node.update(); - x += padX; - } - y += padY; - x = 0; - } - } - } -} diff --git a/packages/react-topology/src/layouts/BreadthFirstLink.ts b/packages/react-topology/src/layouts/BreadthFirstLink.ts deleted file mode 100644 index 55b6966d526..00000000000 --- a/packages/react-topology/src/layouts/BreadthFirstLink.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { LayoutLink } from './LayoutLink'; - -export class BreadthFirstLink extends LayoutLink {} diff --git a/packages/react-topology/src/layouts/BreadthFirstNode.ts b/packages/react-topology/src/layouts/BreadthFirstNode.ts deleted file mode 100644 index 976b2d84335..00000000000 --- a/packages/react-topology/src/layouts/BreadthFirstNode.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { LayoutNode } from './LayoutNode'; -import { Node } from '../types'; - -export class BreadthFirstNode extends LayoutNode { - constructor(node: Node, distance: number, index: number = -1) { - super(node, distance, index); - } -} diff --git a/packages/react-topology/src/layouts/ColaGroup.ts b/packages/react-topology/src/layouts/ColaGroup.ts deleted file mode 100644 index 37866866b05..00000000000 --- a/packages/react-topology/src/layouts/ColaGroup.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { LayoutGroup } from './LayoutGroup'; -import * as webcola from 'webcola'; -export class ColaGroup extends LayoutGroup implements webcola.Group {} diff --git a/packages/react-topology/src/layouts/ColaGroupsLayout.ts b/packages/react-topology/src/layouts/ColaGroupsLayout.ts deleted file mode 100644 index de4fa23bbcb..00000000000 --- a/packages/react-topology/src/layouts/ColaGroupsLayout.ts +++ /dev/null @@ -1,252 +0,0 @@ -import * as webcola from 'webcola'; -import * as d3 from 'd3'; -import { action } from 'mobx'; -import { Graph, Layout, Node } from '../types'; -import { BaseLayout } from './BaseLayout'; -import { LayoutLink } from './LayoutLink'; -import { LayoutGroup } from './LayoutGroup'; -import { LayoutNode } from './LayoutNode'; -import { ColaGroupsNode } from './ColaGroupsNode'; -import { ColaGroup } from './ColaGroup'; -import { ColaLink } from './ColaLink'; -import { ColaLayout } from './ColaLayout'; - -export interface ChildGroup { - group: LayoutGroup; - nodes: LayoutNode[]; - edges: LayoutLink[]; - groups: LayoutGroup[]; -} - -class ColaGroupsLayout extends ColaLayout implements Layout { - private layerNodes: LayoutNode[]; - - private layerGroupNodes: ChildGroup[]; - - private layerGroups: LayoutGroup[]; - - private layerEdges: LayoutLink[]; - - private layoutNodes: LayoutNode[]; - - private childLayouts: BaseLayout[]; - - protected initializeLayout(): void {} - - protected initializeColaGroupLayout(graph: Graph): void { - this.d3Cola = webcola.d3adaptor(d3); - this.d3Cola.handleDisconnected(true); - this.d3Cola.avoidOverlaps(true); - this.d3Cola.jaccardLinkLengths(40, 0.7); - this.d3Cola.on('tick', () => { - this.tickCount++; - if (this.tickCount >= 1 || this.tickCount % this.options.simulationSpeed === 0) { - action(() => this.nodes.forEach(d => d.update()))(); - } - if (this.colaOptions.maxTicks >= 0 && this.tickCount > this.colaOptions.maxTicks) { - this.d3Cola.stop(); - } - }); - this.d3Cola.on('end', () => { - this.tickCount = 0; - this.simulationRunning = false; - action(() => { - if (this.destroyed) { - this.onEnd && this.onEnd(); - return; - } - this.layoutNodes.forEach(d => { - if (!this.simulationStopped) { - d.update(); - } - d.setFixed(false); - }); - if (this.options.layoutOnDrag) { - this.forceSimulation.useForceSimulation(this.nodes, this.edges, this.getFixedNodeDistance); - } - if (this.simulationStopped) { - this.simulationStopped = false; - if (this.restartOnEnd !== undefined) { - this.startColaLayout(false, this.restartOnEnd); - this.startLayout(graph, false, this.restartOnEnd, this.onEnd); - delete this.restartOnEnd; - } - } else if (this.addingNodes) { - // One round of simulation to adjust for new nodes - this.forceSimulation.useForceSimulation(this.nodes, this.edges, this.getFixedNodeDistance); - this.forceSimulation.restart(); - } - this.onEnd && this.onEnd(); - })(); - }); - } - - protected createLayoutNode(node: Node, nodeDistance: number, index: number) { - return new ColaGroupsNode(node, nodeDistance, index); - } - - protected getAllLeaves(group: LayoutGroup): LayoutNode[] { - const leaves = [...group.leaves]; - group.groups?.forEach(subGroup => leaves.push(...this.getAllLeaves(subGroup))); - return leaves; - } - protected getAllSubGroups(group: LayoutGroup): LayoutGroup[] { - const groups = [...group.groups]; - group.groups?.forEach(subGroup => groups.push(...this.getAllSubGroups(subGroup))); - return groups; - } - - protected isNodeInGroups(node: LayoutNode, groups: LayoutGroup[]): boolean { - return !!groups.find(group => group.leaves.includes(node) || this.isNodeInGroups(node, group.groups)); - } - - protected isNodeInChildGroups(node: LayoutNode, groups: ChildGroup[]): boolean { - return !!groups.find(group => group.nodes.includes(node) || this.isNodeInGroups(node, group.groups)); - } - - protected isSubGroup(group: ChildGroup, childGroups: ChildGroup[]): boolean { - return !!childGroups.find(cg => cg.groups.includes(group.group)); - } - - protected getNodeGroup(node: LayoutNode, childGroups: ChildGroup[]): ChildGroup | undefined { - return childGroups.find(group => group.nodes.includes(node) || this.isNodeInGroups(node, group.groups)); - } - - protected getGroupLayout( - graph: Graph, - group: LayoutGroup, - nodes: LayoutNode[], - edges: LayoutLink[], - groups: LayoutGroup[] - ): BaseLayout { - const layout = new ColaGroupsLayout(graph, this.options); - layout.setupLayout(graph, nodes, edges, groups); - return layout; - } - - protected setupLayout(graph: Graph, nodes: LayoutNode[], edges: LayoutLink[], groups: LayoutGroup[]): void { - const constraints = this.getConstraints(nodes as ColaGroupsNode[], groups as ColaGroup[], edges); - let childGroups = groups.reduce((acc, group) => { - if ( - !groups.find(g => group.element.getParent()?.getId() === g.element.getId()) && - (group.groups.length || group.leaves.length) - ) { - const allLeaves = this.getAllLeaves(group); - const groupEdges = edges.filter(edge => allLeaves.includes(edge.sourceNode) && allLeaves.includes(edge.target)); - const groupGroups = this.getAllSubGroups(group); - allLeaves.forEach((l, i) => { - l.index = i; - if (l.parent && !groupGroups.includes(l.parent)) { - l.parent = undefined; - } - }); - groupGroups.forEach((g, i) => { - g.index = 2 * allLeaves.length + i; - g.parent = undefined; - }); - - acc.push({ - group, - nodes: allLeaves, - edges: groupEdges, - groups: groupGroups - }); - } - return acc; - }, [] as ChildGroup[]); - const constrainedGroups = groups.filter(g => constraints.find(c => c.group === g.element.getId())); - this.layerGroups = childGroups.filter(cg => constrainedGroups.includes(cg.group)).map(cg => cg.group); - childGroups = childGroups.filter(cg => !this.layerGroups.includes(cg.group)); - this.layerNodes = nodes.filter(node => !this.isNodeInChildGroups(node, childGroups)); - this.layerGroupNodes = childGroups.filter(cg => !this.isSubGroup(cg, childGroups)); - this.layerEdges = edges.reduce((acc, edge) => { - const source = this.getNodeGroup(edge.sourceNode, childGroups); - const target = this.getNodeGroup(edge.targetNode, childGroups); - if (!source || !target || source !== target) { - acc.push(edge); - } - return acc; - }, [] as LayoutLink[]); - this.childLayouts = childGroups.map(childGroup => - this.getGroupLayout(graph, childGroup.group, childGroup.nodes, childGroup.edges, childGroup.groups) - ); - } - - private startChildLayout( - graph: Graph, - childLayout: BaseLayout, - initialRun: boolean, - addingNodes: boolean - ): Promise { - return new Promise(resolve => { - childLayout.doStartLayout(graph, initialRun, addingNodes, () => { - resolve(); - }); - }); - } - - protected startColaLayout(initialRun: boolean, addingNodes: boolean): void { - this.simulationRunning = true; - this.tickCount = 0; - this.addingNodes = addingNodes; - - const doStart = () => { - this.initializeColaGroupLayout(this.graph); - const { width, height } = this.graph.getBounds(); - this.d3Cola.size([width, height]); - this.layoutNodes = [...this.layerNodes]; - this.layerGroupNodes.forEach(cg => { - const layoutNode = this.createLayoutNode(cg.group.element, this.options.nodeDistance, cg.group.index); - this.layoutNodes.push(layoutNode); - this.layerEdges.forEach(edge => { - if (cg.nodes.find(n => n.id === edge.sourceNode.id) || this.isNodeInGroups(edge.sourceNode, cg.groups)) { - edge.sourceNode = layoutNode; - } - if (cg.nodes.find(n => n.id === edge.targetNode.id) || this.isNodeInGroups(edge.targetNode, cg.groups)) { - edge.targetNode = layoutNode; - } - }); - }); - - // Get any custom constraints - const constraints = this.getConstraints( - this.layoutNodes as ColaGroupsNode[], - this.layerGroups as ColaGroup[], - this.layerEdges - ); - this.d3Cola.constraints(constraints); - - this.d3Cola.nodes(this.layoutNodes); - this.d3Cola.groups(this.layerGroups); - this.d3Cola.links(this.layerEdges); - this.d3Cola.alpha(0.2); - - this.d3Cola.start( - addingNodes ? 0 : this.colaOptions.initialUnconstrainedIterations, - addingNodes ? 0 : this.colaOptions.initialUserConstraintIterations, - addingNodes ? 0 : this.colaOptions.initialAllConstraintsIterations, - addingNodes ? 0 : this.colaOptions.gridSnapIterations, - false, - !addingNodes - ); - }; - - if (this.childLayouts?.length) { - const runLayouts = (childLayouts: BaseLayout[]): Promise => - Promise.all( - childLayouts.map(childLayout => this.startChildLayout(this.graph, childLayout, initialRun, addingNodes)) - ); - - runLayouts(this.childLayouts) - .then(() => { - doStart(); - }) - .catch(() => {}); - return; - } - - doStart(); - } -} - -export { ColaGroupsLayout, ColaGroupsNode, ColaGroup, ColaLink }; diff --git a/packages/react-topology/src/layouts/ColaGroupsNode.ts b/packages/react-topology/src/layouts/ColaGroupsNode.ts deleted file mode 100644 index f82fa9b4120..00000000000 --- a/packages/react-topology/src/layouts/ColaGroupsNode.ts +++ /dev/null @@ -1,58 +0,0 @@ -import * as webcola from 'webcola'; -import { isNode, Node } from '../types'; -import { LayoutNode } from './LayoutNode'; -import { Point } from '../geom'; - -export class ColaGroupsNode extends LayoutNode implements webcola.Node { - // fixed is used by Cola during node additions: 1 for fixed - public fixed: number = 0; - - constructor(node: Node, distance: number, index: number = -1) { - super(node, distance, index); - // TODO: Investigate why the issue with rectangular nodes causing the layout to become vertical - // may need to do more here like what is done in ColaNode - } - setFixed(fixed: boolean): void { - super.setFixed(fixed); - this.fixed = fixed ? 1 : 0; - } - - update() { - if (!this.isFixed && this.xx != null && this.yy != null) { - if (this.node.isGroup()) { - const prevLocation = this.node.getBounds().getCenter(); - const xOffset = this.xx - prevLocation.x; - const yOffset = this.yy - prevLocation.y; - - this.node.getChildren().forEach(child => { - if (isNode(child)) { - const node = child as Node; - const position = node.getPosition(); - node.setPosition(new Point(position.x + xOffset, position.y + yOffset)); - } - }); - } else { - this.setPosition(this.xx, this.yy); - } - } - this.xx = undefined; - this.yy = undefined; - } - - get width(): number { - return this.nodeBounds.width + this.distance * 2; - } - - get height(): number { - return this.nodeBounds.height + this.distance * 2; - } - - get radius(): number { - const bounds = this.nodeBounds; - return Math.max(bounds.width, bounds.height) / 2; - } - - get collisionRadius(): number { - return this.radius + this.distance; - } -} diff --git a/packages/react-topology/src/layouts/ColaLayout.ts b/packages/react-topology/src/layouts/ColaLayout.ts deleted file mode 100644 index 30dbfe18cc1..00000000000 --- a/packages/react-topology/src/layouts/ColaLayout.ts +++ /dev/null @@ -1,199 +0,0 @@ -import * as webcola from 'webcola'; -import * as d3 from 'd3'; -import { action } from 'mobx'; -import { Edge, Graph, Layout, Node } from '../types'; -import { BaseLayout } from './BaseLayout'; -import { LayoutOptions } from './LayoutOptions'; -import { LayoutLink } from './LayoutLink'; -import { LayoutGroup } from './LayoutGroup'; -import { LayoutNode } from './LayoutNode'; -import { ColaNode } from './ColaNode'; -import { ColaGroup } from './ColaGroup'; -import { ColaLink } from './ColaLink'; - -export interface ColaLayoutOptions { - maxTicks: number; - initialUnconstrainedIterations: number; - initialUserConstraintIterations: number; - initialAllConstraintsIterations: number; - gridSnapIterations: number; -} - -const COLA_LAYOUT_DEFAULTS: ColaLayoutOptions = { - maxTicks: 1000, - initialUnconstrainedIterations: 200, - initialUserConstraintIterations: 50, - initialAllConstraintsIterations: 150, - gridSnapIterations: 10 -}; - -class ColaLayout extends BaseLayout implements Layout { - protected d3Cola: any; - - protected colaOptions: ColaLayoutOptions; - - protected tickCount = 0; - - protected destroyed = false; - - protected simulationRunning = false; - - protected simulationStopped = false; - - protected restartOnEnd: boolean = undefined; - - protected addingNodes: boolean = false; - - protected onEnd: () => void; - - constructor(graph: Graph, options?: Partial) { - super(graph, options); - this.colaOptions = { - ...COLA_LAYOUT_DEFAULTS, - ...options - }; - this.initializeLayout(); - } - - protected initializeLayout(): void { - this.d3Cola = webcola.d3adaptor(d3); - this.d3Cola.handleDisconnected(true); - this.d3Cola.avoidOverlaps(true); - - this.d3Cola.on('tick', () => { - this.tickCount++; - if (this.tickCount >= 1 || this.tickCount % this.options.simulationSpeed === 0) { - action(() => this.nodes.forEach(d => d.update()))(); - } - if (this.colaOptions.maxTicks >= 0 && this.tickCount > this.colaOptions.maxTicks) { - this.d3Cola.stop(); - } - }); - this.d3Cola.on('end', () => { - this.tickCount = 0; - this.simulationRunning = false; - action(() => { - if (this.destroyed) { - this.onEnd && this.onEnd(); - return; - } - this.nodes.forEach(d => { - if (!this.simulationStopped) { - d.update(); - } - d.setFixed(false); - }); - if (this.options.layoutOnDrag) { - this.forceSimulation.useForceSimulation(this.nodes, this.edges, this.getFixedNodeDistance); - } - if (this.simulationStopped) { - this.simulationStopped = false; - if (this.restartOnEnd !== undefined) { - this.startColaLayout(false, this.restartOnEnd); - delete this.restartOnEnd; - } - } else if (this.addingNodes) { - // One round of simulation to adjust for new nodes - this.forceSimulation.useForceSimulation(this.nodes, this.edges, this.getFixedNodeDistance); - this.forceSimulation.restart(); - } - this.onEnd && this.onEnd(); - })(); - }); - } - - protected onSimulationEnd = () => { - if (this.addingNodes) { - if (!this.options.layoutOnDrag) { - this.forceSimulation.stopSimulation(); - } - this.addingNodes = false; - } - }; - - destroy(): void { - super.destroy(); - - this.destroyed = true; - if (this.d3Cola) { - this.d3Cola.stop(); - } - } - - initDrag() { - // Set the alpha to 0 to halt any ticks that may be occurring - if (this.d3Cola) { - this.d3Cola.alpha(0); - } - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - protected getConstraints(nodes: ColaNode[], groups: ColaGroup[], edges: ColaLink[]): any[] { - return []; - } - - protected stopSimulation(): void { - if (this.simulationRunning) { - this.simulationStopped = true; - if (this.d3Cola) { - this.d3Cola.stop(); - } - } - super.stopSimulation(); - } - - protected createLayoutNode(node: Node, nodeDistance: number, index: number) { - return new ColaNode(node, nodeDistance, index); - } - - protected createLayoutLink(edge: Edge, source: LayoutNode, target: LayoutNode): LayoutLink { - return new ColaLink(edge, source, target); - } - - protected createLayoutGroup(node: Node, padding: number, index: number) { - return new ColaGroup(node, padding, index); - } - - protected getFauxEdges(): LayoutLink[] { - return []; - } - - protected setupLayout(graph: Graph, nodes: LayoutNode[], edges: LayoutLink[], groups: LayoutGroup[]): void { - const { width, height } = graph.getBounds(); - this.d3Cola.size([width, height]); - - // Get any custom constraints - this.d3Cola.constraints(this.getConstraints(nodes as ColaNode[], groups as ColaGroup[], edges)); - - this.d3Cola.nodes(nodes); - this.d3Cola.links(edges); - this.d3Cola.groups(groups); - } - - protected startColaLayout(initialRun: boolean, addingNodes: boolean): void { - this.simulationRunning = true; - this.d3Cola.alpha(0.2); - this.tickCount = 0; - this.addingNodes = addingNodes; - - this.d3Cola.start( - addingNodes ? 0 : this.colaOptions.initialUnconstrainedIterations, - addingNodes ? 0 : this.colaOptions.initialUserConstraintIterations, - addingNodes ? 0 : this.colaOptions.initialAllConstraintsIterations, - addingNodes ? 0 : this.colaOptions.gridSnapIterations, - false, - !addingNodes - ); - } - - protected startLayout(graph: Graph, initialRun: boolean, addingNodes: boolean, onEnd?: () => void): void { - this.onEnd = onEnd; - if (!this.simulationStopped) { - this.startColaLayout(initialRun, addingNodes); - } else { - this.restartOnEnd = addingNodes; - } - } -} - -export { ColaLayout, ColaNode, ColaGroup, ColaLink }; diff --git a/packages/react-topology/src/layouts/ColaLink.ts b/packages/react-topology/src/layouts/ColaLink.ts deleted file mode 100644 index 8f8db93ea49..00000000000 --- a/packages/react-topology/src/layouts/ColaLink.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Edge } from '../types'; -import { LayoutLink } from './LayoutLink'; -import { LayoutNode } from './LayoutNode'; -import { ColaNode } from './ColaNode'; -import * as webcola from 'webcola'; -export class ColaLink extends LayoutLink implements webcola.Link { - constructor(edge: Edge, source: LayoutNode | number, target: LayoutNode | number) { - super(edge, source as LayoutNode, target as LayoutNode); - } -} diff --git a/packages/react-topology/src/layouts/ColaNode.ts b/packages/react-topology/src/layouts/ColaNode.ts deleted file mode 100644 index 047b4d69843..00000000000 --- a/packages/react-topology/src/layouts/ColaNode.ts +++ /dev/null @@ -1,21 +0,0 @@ -import * as webcola from 'webcola'; -import { Node } from '../types'; -import { LayoutNode } from './LayoutNode'; - -export class ColaNode extends LayoutNode implements webcola.Node { - // fixed is used by Cola during node additions: 1 for fixed - public fixed: number = 0; - constructor(node: Node, distance: number, index: number = -1) { - super(node, distance, index); - // TODO: Investigate why the issue with rectangular nodes causing the layout to become vertical - // this setting will be a problem if nodes can change size dynamically - // Cola layout has issues with non-square nodes - const maxDimension = Math.max(this.nodeWidth, this.nodeHeight); - this.nodeWidth = maxDimension; - this.nodeHeight = maxDimension; - } - setFixed(fixed: boolean): void { - super.setFixed(fixed); - this.fixed = fixed ? 1 : 0; - } -} diff --git a/packages/react-topology/src/layouts/ConcentricGroup.ts b/packages/react-topology/src/layouts/ConcentricGroup.ts deleted file mode 100644 index ace4814c6d1..00000000000 --- a/packages/react-topology/src/layouts/ConcentricGroup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { LayoutGroup } from './LayoutGroup'; -export class ConcentricGroup extends LayoutGroup {} diff --git a/packages/react-topology/src/layouts/ConcentricLayout.ts b/packages/react-topology/src/layouts/ConcentricLayout.ts deleted file mode 100644 index 843836996a3..00000000000 --- a/packages/react-topology/src/layouts/ConcentricLayout.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { Edge, Graph, Layout, Node } from '../types'; -import { BaseLayout } from './BaseLayout'; -import { LayoutOptions } from './LayoutOptions'; -import { LayoutNode } from './LayoutNode'; -import { LayoutLink } from './LayoutLink'; -import { ConcentricNode } from './ConcentricNode'; -import { ConcentricLink } from './ConcentricLink'; -import { ConcentricGroup } from './ConcentricGroup'; - -export type ConcentricLayoutOptions = LayoutOptions & { - splitLevel?: number; -}; - -export class ConcentricLayout extends BaseLayout implements Layout { - private concentricOptions: ConcentricLayoutOptions; - - constructor(graph: Graph, options?: Partial) { - super(graph, options); - this.concentricOptions = { - ...this.options, - ...options - }; - } - - protected createLayoutNode(node: Node, nodeDistance: number, index: number) { - return new ConcentricNode(node, nodeDistance, index); - } - - protected createLayoutLink(edge: Edge, source: LayoutNode, target: LayoutNode, isFalse: boolean): LayoutLink { - return new ConcentricLink(edge, source, target, isFalse); - } - - protected createLayoutGroup(node: Node, padding: number, index: number) { - return new ConcentricGroup(node, padding, index); - } - - protected startLayout(graph: Graph, initialRun: boolean, addingNodes: boolean): void { - if (initialRun || addingNodes) { - const weights = {}; - this.nodes.forEach(node => { - weights[node.id] = { in: 0, out: 0, total: 0 }; - }); - this.edges.forEach(edge => { - weights[edge.target.id].in++; - weights[edge.target.id].total++; - weights[edge.source.id].out++; - weights[edge.source.id].total++; - }); - - const nodesWeight = Object.keys(weights).map(k => ({ id: k, total: weights[k].total })); - nodesWeight.sort((a: any, b: any) => b.total - a.total); - - const splitLevel = this.concentricOptions.splitLevel ? this.concentricOptions.splitLevel : 4; - const levelWidth = nodesWeight.length > 0 ? nodesWeight[0].total / splitLevel : 0; - const levels: any = [[]]; - let currentLevel = levels[0]; - nodesWeight.forEach(n => { - if (currentLevel.length > 0) { - const diff = Math.abs(currentLevel[0].total - n.total); - if (diff >= levelWidth) { - currentLevel = []; - levels.push(currentLevel); - } - } - - currentLevel.push(n); - }); - - let innerR = 0; - let maxWH = 0; - // This padding should be configurable - const padding = maxWH; - if (levels.length > 0) { - let maxWidth = 0; - let maxHeight = 0; - levels[0].forEach((n: any) => { - const node = this.nodesMap[n.id]; - if (maxWidth < node.width) { - maxWidth = node.width; - } - if (maxHeight < node.height) { - maxHeight = node.height; - } - }); - maxWH = Math.max(maxWidth, maxHeight); - innerR = Math.round((levels[0].length * maxWH) / (2 * Math.PI)); - } - const outerR = levels.length * (maxWH + padding) + innerR; - const center = { - x: outerR + maxWH, - y: outerR + maxWH - }; - - let r = innerR; - for (const level of levels) { - const theta = (2 * Math.PI) / level.length; - for (let j = 0; j < level.length; j++) { - const node = this.nodesMap[level[j].id]; - node.x = center.x + r * Math.cos(theta * j); - node.y = center.y + r * Math.sin(theta * j); - node.update(); - } - r += maxWH + padding; - } - } - } -} diff --git a/packages/react-topology/src/layouts/ConcentricLink.ts b/packages/react-topology/src/layouts/ConcentricLink.ts deleted file mode 100644 index f00a225488f..00000000000 --- a/packages/react-topology/src/layouts/ConcentricLink.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { LayoutLink } from './LayoutLink'; - -export class ConcentricLink extends LayoutLink {} diff --git a/packages/react-topology/src/layouts/ConcentricNode.ts b/packages/react-topology/src/layouts/ConcentricNode.ts deleted file mode 100644 index 409c9011511..00000000000 --- a/packages/react-topology/src/layouts/ConcentricNode.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { LayoutNode } from './LayoutNode'; -import { Node } from '../types'; - -export class ConcentricNode extends LayoutNode { - constructor(node: Node, distance: number, index: number = -1) { - super(node, distance, index); - } -} diff --git a/packages/react-topology/src/layouts/DagreGroup.ts b/packages/react-topology/src/layouts/DagreGroup.ts deleted file mode 100644 index aa6cd313462..00000000000 --- a/packages/react-topology/src/layouts/DagreGroup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { LayoutGroup } from './LayoutGroup'; -export class DagreGroup extends LayoutGroup {} diff --git a/packages/react-topology/src/layouts/DagreLayout.ts b/packages/react-topology/src/layouts/DagreLayout.ts deleted file mode 100644 index ecab6c47b8f..00000000000 --- a/packages/react-topology/src/layouts/DagreLayout.ts +++ /dev/null @@ -1,93 +0,0 @@ -import * as dagre from 'dagre'; -import * as _ from 'lodash'; -import { Edge, Graph, Layout, Node } from '../types'; -import { BaseLayout, LAYOUT_DEFAULTS } from './BaseLayout'; -import { LayoutOptions } from './LayoutOptions'; -import { LayoutLink } from './LayoutLink'; -import { LayoutNode } from './LayoutNode'; -import { DagreNode } from './DagreNode'; -import { DagreGroup } from './DagreGroup'; -import { DagreLink } from './DagreLink'; - -export type DagreLayoutOptions = LayoutOptions & dagre.GraphLabel & { ignoreGroups?: boolean }; - -export class DagreLayout extends BaseLayout implements Layout { - protected dagreOptions: DagreLayoutOptions; - - constructor(graph: Graph, options?: Partial) { - super(graph, options); - this.dagreOptions = { - ...this.options, - layoutOnDrag: false, - marginx: 0, - marginy: 0, - nodesep: this.options.nodeDistance, - edgesep: this.options.linkDistance, - ranker: 'tight-tree', - rankdir: 'TB', - ...options - }; - } - - protected createLayoutNode(node: Node, nodeDistance: number, index: number) { - return new DagreNode(node, nodeDistance, index); - } - - protected createLayoutLink(edge: Edge, source: LayoutNode, target: LayoutNode, isFalse: boolean): LayoutLink { - return new DagreLink(edge, source, target, isFalse); - } - - protected createLayoutGroup(node: Node, padding: number, index: number) { - return new DagreGroup(node, padding, index); - } - - protected updateEdgeBendpoints(edges: DagreLink[]): void { - _.forEach(edges, edge => { - const link = edge as DagreLink; - link.updateBendpoints(); - }); - } - - protected getFauxEdges(): LayoutLink[] { - return []; - } - - protected startLayout(graph: Graph, initialRun: boolean, addingNodes: boolean): void { - if (initialRun || addingNodes) { - const dagreGraph = new dagre.graphlib.Graph({ compound: true }); - dagreGraph.setGraph(_.omit(this.dagreOptions, Object.keys(LAYOUT_DEFAULTS))); - - if (!this.dagreOptions.ignoreGroups) { - _.forEach(this.groups, group => { - dagreGraph.setNode(group.id, group); - dagreGraph.setParent(group.id, group.element.getParent().getId()); - }); - } - - const updatedNodes: dagre.Node[] = []; - _.forEach(this.nodes, node => { - const updateNode = (node as DagreNode).getUpdatableNode(); - updatedNodes.push(updateNode); - dagreGraph.setNode(node.id, updateNode); - if (!this.dagreOptions.ignoreGroups) { - dagreGraph.setParent(node.id, node.element.getParent().getId()); - } - }); - - _.forEach(this.edges, dagreEdge => { - dagreGraph.setEdge(dagreEdge.source.id, dagreEdge.target.id, dagreEdge); - }); - - dagre.layout(dagreGraph); - this.nodes.forEach(node => { - (node as DagreNode).updateToNode(dagreGraph.node(node.id)); - }); - - this.updateEdgeBendpoints(this.edges as DagreLink[]); - } - - if (this.dagreOptions.layoutOnDrag) { - this.forceSimulation.useForceSimulation(this.nodes, this.edges, this.getFixedNodeDistance); - } - } -} diff --git a/packages/react-topology/src/layouts/DagreLink.ts b/packages/react-topology/src/layouts/DagreLink.ts deleted file mode 100644 index d33e36518b3..00000000000 --- a/packages/react-topology/src/layouts/DagreLink.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Point from '../geom/Point'; -import { LayoutLink } from './LayoutLink'; -export class DagreLink extends LayoutLink { - public points?: { x: number; y: number }[]; - updateBendpoints(): void { - if (this.points && !this.isFalse && this.points.length > 2) { - this.element.setBendpoints(this.points.slice(1, -1).map((point: any) => new Point(point.x, point.y))); - } - } -} diff --git a/packages/react-topology/src/layouts/DagreNode.ts b/packages/react-topology/src/layouts/DagreNode.ts deleted file mode 100644 index 6a92887c264..00000000000 --- a/packages/react-topology/src/layouts/DagreNode.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { LayoutNode } from './LayoutNode'; -export class DagreNode extends LayoutNode implements dagre.Node { - getUpdatableNode(): dagre.Node { - return { - id: this.id, - width: this.width, - height: this.height, - x: this.x, - y: this.y - }; - } - updateToNode(updatedNode: dagre.Node | undefined): void { - if (updatedNode) { - this.x = updatedNode.x; - this.y = updatedNode.y; - this.update(); - } - } -} diff --git a/packages/react-topology/src/layouts/ForceLayout.ts b/packages/react-topology/src/layouts/ForceLayout.ts deleted file mode 100644 index aae92b559a0..00000000000 --- a/packages/react-topology/src/layouts/ForceLayout.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Graph, Layout } from '../types'; -import { getGroupPadding } from '../utils/element-utils'; -import { ForceSimulationNode } from './ForceSimulation'; -import { BaseLayout } from '.'; -import { LayoutLink } from './LayoutLink'; -import { LayoutOptions } from './LayoutOptions'; - -export class ForceLayout extends BaseLayout implements Layout { - constructor(graph: Graph, options?: Partial) { - super(graph, { - ...options, - layoutOnDrag: true, - onSimulationEnd: () => { - this.nodes.forEach(n => n.setFixed(false)); - } - }); - } - - protected getLinkDistance = (e: LayoutLink | d3.SimulationLinkDatum) => { - let distance = this.options.linkDistance + e.source.radius + e.target.radius; - const isFalse = e instanceof LayoutLink && e.isFalse; - if (!isFalse && e.source.element.getParent() !== e.target.element.getParent()) { - // find the group padding - distance += getGroupPadding(e.source.element.getParent()); - distance += getGroupPadding(e.target.element.getParent()); - } - - return distance; - }; - - protected startLayout(graph: Graph): void { - const { width, height } = graph.getBounds(); - const cx = width / 2; - const cy = height / 2; - this.forceSimulation.forceCenter(cx, cy); - this.forceSimulation.alpha(1); - this.forceSimulation.useForceSimulation(this.nodes, this.edges, this.getLinkDistance); - this.forceSimulation.restart(); - } - - protected updateLayout(): void { - this.forceSimulation.useForceSimulation(this.nodes, this.edges, this.getFixedNodeDistance); - this.forceSimulation.alpha(0.2); - this.forceSimulation.restart(); - } -} diff --git a/packages/react-topology/src/layouts/ForceSimulation.ts b/packages/react-topology/src/layouts/ForceSimulation.ts deleted file mode 100644 index a879dd58bc8..00000000000 --- a/packages/react-topology/src/layouts/ForceSimulation.ts +++ /dev/null @@ -1,112 +0,0 @@ -import * as d3 from 'd3'; -import { action } from 'mobx'; - -export interface ForceSimulationNode extends d3.SimulationNodeDatum { - id: string; - collisionRadius: number; - update(): void; -} - -interface ForceSimulationOptions { - collideDistance: number; - simulationSpeed: number; - chargeStrength: number; - onSimulationEnd?: () => void; -} - -class ForceSimulation { - private forceLink: d3.ForceLink>; - - private simulation: any; - - private options: ForceSimulationOptions; - - private destroyed = false; - - constructor(options?: Partial) { - this.options = { - ...{ - collideDistance: 0, - simulationSpeed: 10, - chargeStrength: 0 - }, - ...options - }; - - // Setup Force Simulation - this.simulation = d3.forceSimulation(); - this.simulation.force( - 'collide', - d3.forceCollide().radius(d => d.collisionRadius + this.options.collideDistance) - ); - this.simulation.force('charge', d3.forceManyBody().strength(this.options.chargeStrength)); - this.simulation.alpha(0); - this.forceLink = d3.forceLink>().id(e => e.id); - - this.simulation.force('link', this.forceLink); - this.simulation.on( - 'tick', - action(() => { - // speed up the simulation - for (let i = 0; i < this.options.simulationSpeed; i++) { - this.simulation.tick(); - } - this.simulation.nodes().forEach((d: ForceSimulationNode) => !this.destroyed && d.update()); - }) - ); - if (options.onSimulationEnd) { - this.simulation.on('end', this.options.onSimulationEnd); - } - } - - public destroy(): void { - this.destroyed = true; - this.simulation.stop(); - } - - public useForceSimulation( - nodes: ForceSimulationNode[], - links: d3.SimulationLinkDatum[], - distance: ( - link: d3.SimulationLinkDatum, - i: number, - links: d3.SimulationLinkDatum[] - ) => number - ): void { - this.forceLink.distance(distance); - - // first remove the links so that the layout doesn't error - this.forceLink.links([]); - - this.simulation.nodes([...nodes]); - this.forceLink.links([...links]); - } - - public haltForceSimulation(): void { - this.simulation.alpha(0); - this.simulation.nodes([]); - this.forceLink.links([]); - } - - public forceCenter(cx: number, cy: number): void { - this.simulation.force('center', d3.forceCenter(cx, cy)); - } - - public stopSimulation(): void { - this.simulation.stop(); - } - - public restart() { - this.simulation.restart(); - } - - public alpha(value: number) { - this.simulation.alpha(value); - } - - public alphaTarget(value: number) { - this.simulation.alphaTarget(value); - } -} - -export { ForceSimulation }; diff --git a/packages/react-topology/src/layouts/GridGroup.ts b/packages/react-topology/src/layouts/GridGroup.ts deleted file mode 100644 index 9fdae85a85e..00000000000 --- a/packages/react-topology/src/layouts/GridGroup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { LayoutGroup } from './LayoutGroup'; -export class GridGroup extends LayoutGroup {} diff --git a/packages/react-topology/src/layouts/GridLayout.ts b/packages/react-topology/src/layouts/GridLayout.ts deleted file mode 100644 index a68d4096840..00000000000 --- a/packages/react-topology/src/layouts/GridLayout.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Edge, Graph, Layout, Node } from '../types'; -import { BaseLayout } from './BaseLayout'; -import { LayoutOptions } from './LayoutOptions'; -import { LayoutNode } from './LayoutNode'; -import { LayoutLink } from './LayoutLink'; -import { GridNode } from './GridNode'; -import { GridLink } from './GridLink'; -import { GridGroup } from './GridGroup'; - -export type GridLayoutOptions = LayoutOptions; - -export class GridLayout extends BaseLayout implements Layout { - private gridOptions: GridLayoutOptions; - - constructor(graph: Graph, options?: Partial) { - super(graph, options); - this.gridOptions = { - ...this.options, - ...options - }; - } - - protected createLayoutNode(node: Node, nodeDistance: number, index: number) { - return new GridNode(node, nodeDistance, index); - } - - protected createLayoutLink(edge: Edge, source: LayoutNode, target: LayoutNode, isFalse: boolean): LayoutLink { - return new GridLink(edge, source, target, isFalse); - } - - protected createLayoutGroup(node: Node, padding: number, index: number) { - return new GridGroup(node, padding, index); - } - - protected startLayout(graph: Graph, initialRun: boolean, addingNodes: boolean): void { - if (initialRun || addingNodes) { - this.nodes.sort((a, b) => a.id.localeCompare(b.id)); - const totalNodes = this.nodes.length; - const maxPerRow = Math.round(Math.sqrt(totalNodes)); - let x = 0; - let y = 0; - let rowI = 0; - let padX = 0; - let padY = 0; - for (let i = 0; i < totalNodes; i++) { - const node = this.nodes[i]; - if (padX < node.width) { - padX = node.width; - } - if (padY < node.height) { - padY = node.height; - } - } - for (let i = 0; i < totalNodes; i++) { - const node = this.nodes[i]; - node.x = x; - node.y = y; - node.update(); - - if (rowI < maxPerRow) { - x += padX; - rowI++; - } else { - rowI = 0; - x = 0; - y += padY; - } - } - } - } -} diff --git a/packages/react-topology/src/layouts/GridLink.ts b/packages/react-topology/src/layouts/GridLink.ts deleted file mode 100644 index 9970bb0d400..00000000000 --- a/packages/react-topology/src/layouts/GridLink.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { LayoutLink } from './LayoutLink'; - -export class GridLink extends LayoutLink {} diff --git a/packages/react-topology/src/layouts/GridNode.ts b/packages/react-topology/src/layouts/GridNode.ts deleted file mode 100644 index e092e59f2e0..00000000000 --- a/packages/react-topology/src/layouts/GridNode.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { LayoutNode } from './LayoutNode'; -import { Node } from '../types'; - -export class GridNode extends LayoutNode { - constructor(node: Node, distance: number, index: number = -1) { - super(node, distance, index); - } -} diff --git a/packages/react-topology/src/layouts/LayoutGroup.ts b/packages/react-topology/src/layouts/LayoutGroup.ts deleted file mode 100644 index 20fefd66a32..00000000000 --- a/packages/react-topology/src/layouts/LayoutGroup.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Node } from '../types'; -import { LayoutNode } from './LayoutNode'; -export class LayoutGroup { - protected readonly node: Node; - public leaves: LayoutNode[] = []; - public groups: LayoutGroup[] = []; - public parent?: LayoutGroup; - public padding: number; - public index: number; - constructor(node: Node, padding: number, index: number) { - this.node = node; - this.padding = padding; - this.index = index; - } - get element(): Node { - return this.node; - } - get id(): string { - return this.node.getId(); - } -} diff --git a/packages/react-topology/src/layouts/LayoutLink.ts b/packages/react-topology/src/layouts/LayoutLink.ts deleted file mode 100644 index 48a7cfbb493..00000000000 --- a/packages/react-topology/src/layouts/LayoutLink.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Edge } from '../types'; -import { LayoutNode } from './LayoutNode'; -export class LayoutLink { - private readonly edge: Edge; - public sourceNode: LayoutNode; - public targetNode: LayoutNode; - public isFalse: boolean; - constructor(edge: Edge, source: LayoutNode, target: LayoutNode, isFalse: boolean = false) { - this.edge = edge; - this.sourceNode = source; - this.targetNode = target; - this.isFalse = isFalse; - } - get element(): Edge { - return this.edge; - } - get id(): string { - return this.edge.getId(); - } - get source(): any { - return this.sourceNode; - } - get target(): any { - return this.targetNode; - } -} diff --git a/packages/react-topology/src/layouts/LayoutNode.ts b/packages/react-topology/src/layouts/LayoutNode.ts deleted file mode 100644 index 7a4f6545999..00000000000 --- a/packages/react-topology/src/layouts/LayoutNode.ts +++ /dev/null @@ -1,93 +0,0 @@ -import * as d3 from 'd3'; -import { Node, NodeStyle } from '../types'; -import { Point, Rect } from '../geom'; -import { LayoutGroup } from './LayoutGroup'; - -export class LayoutNode implements d3.SimulationNodeDatum { - protected readonly node: Node; - protected xx?: number; - protected yy?: number; - protected nodeWidth: number; - protected nodeHeight: number; - protected nodeRadius: number; - public readonly distance: number; - public parent?: LayoutGroup; - public index: number; - // isFixed is used locally for Force simulation during drag events - public isFixed: boolean = false; - constructor(node: Node, distance: number, index: number = -1) { - this.node = node; - this.distance = distance; - this.index = index; - // Currently we support only fixed node sizes, this will need to change if/when dynamic node sizes are supported - const bounds = this.nodeBounds; - this.nodeWidth = bounds.width + this.distance * 2; - this.nodeHeight = bounds.height + this.distance * 2; - this.nodeRadius = Math.max(bounds.width, bounds.height) / 2; - } - get element(): Node { - return this.node; - } - get id(): string { - return this.node.getId(); - } - get x(): number { - return this.xx || this.node.getBounds().getCenter().x; - } - set x(x: number) { - if (!Number.isNaN(x)) { - this.xx = x; - } - } - get y(): number { - return this.yy || this.node.getBounds().getCenter().y; - } - set y(y: number) { - if (!Number.isNaN(y)) { - this.yy = y; - } - } - get fx(): number | undefined { - return this.isFixed ? this.node.getBounds().getCenter().x : undefined; - } - get fy(): number | undefined { - return this.isFixed ? this.node.getBounds().getCenter().y : undefined; - } - setPosition(x: number, y: number) { - const bounds = this.node.getBounds(); - this.node.setPosition(new Point(x - bounds.width / 2, y - bounds.height / 2)); - } - setFixed(fixed: boolean): void { - this.isFixed = fixed; - } - get nodeBounds(): Rect { - const { padding } = this.node.getStyle(); - // Currently non-group nodes do not include their padding in the bounds - if (!this.node.isGroup() && padding) { - return this.node - .getBounds() - .clone() - .padding(padding); - } - return this.node.getBounds(); - } - get width(): number { - return this.nodeWidth; - } - get height(): number { - return this.nodeHeight; - } - update() { - if (!this.isFixed && this.xx != null && this.yy != null) { - this.setPosition(this.xx, this.yy); - } - this.xx = undefined; - this.yy = undefined; - } - get radius(): number { - return this.nodeRadius; - } - get collisionRadius(): number { - return this.radius + this.distance; - } -} diff --git a/packages/react-topology/src/layouts/LayoutOptions.ts b/packages/react-topology/src/layouts/LayoutOptions.ts deleted file mode 100644 index 9027fcc6d0f..00000000000 --- a/packages/react-topology/src/layouts/LayoutOptions.ts +++ /dev/null @@ -1,11 +0,0 @@ -export interface LayoutOptions { - linkDistance: number; - nodeDistance: number; - groupDistance: number; - collideDistance: number; - simulationSpeed: number; - chargeStrength: number; - allowDrag: boolean; - layoutOnDrag: boolean; - onSimulationEnd?: () => void; -} diff --git a/packages/react-topology/src/layouts/index.ts b/packages/react-topology/src/layouts/index.ts deleted file mode 100644 index 4efa664c427..00000000000 --- a/packages/react-topology/src/layouts/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -export * from './BaseLayout'; -export * from './BreadthFirstLayout'; -export * from './ColaLayout'; -export * from './ColaGroupsLayout'; -export * from './ConcentricLayout'; -export * from './DagreLayout'; -export * from './ForceLayout'; -export * from './GridLayout'; -export * from './LayoutNode'; -export * from './LayoutGroup'; -export * from './LayoutLink'; -export * from './LayoutOptions'; diff --git a/packages/react-topology/src/mobx-exports.ts b/packages/react-topology/src/mobx-exports.ts deleted file mode 100644 index b4e5f492c36..00000000000 --- a/packages/react-topology/src/mobx-exports.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { action } from 'mobx'; -import { observer } from 'mobx-react'; - -// re-export for ease of use externally -export { action, observer }; diff --git a/packages/react-topology/src/pipelines/components/anchors/TaskNodeSourceAnchor.ts b/packages/react-topology/src/pipelines/components/anchors/TaskNodeSourceAnchor.ts deleted file mode 100644 index a03759cc004..00000000000 --- a/packages/react-topology/src/pipelines/components/anchors/TaskNodeSourceAnchor.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Point } from '../../../geom'; -import { AbstractAnchor } from '../../../anchors'; -import { Node, ScaleDetailsLevel } from '../../../types'; - -export default class TaskNodeSourceAnchor extends AbstractAnchor { - private detailsLevel: ScaleDetailsLevel; - private lowDetailsStatusIconWidth = 0; - - constructor(owner: E, detailsLevel: ScaleDetailsLevel, lowDetailsStatusIconWidth: number) { - super(owner); - this.detailsLevel = detailsLevel; - this.lowDetailsStatusIconWidth = lowDetailsStatusIconWidth; - } - - getLocation(): Point { - return this.getReferencePoint(); - } - - getReferencePoint(): Point { - const bounds = this.owner.getBounds(); - if (this.detailsLevel !== ScaleDetailsLevel.high) { - const scale = this.owner.getGraph().getScale(); - return new Point(bounds.x + this.lowDetailsStatusIconWidth * (1 / scale), bounds.y + bounds.height / 2); - } - return new Point(bounds.right(), bounds.y + bounds.height / 2); - } -} diff --git a/packages/react-topology/src/pipelines/components/anchors/TaskNodeSourceAnchorSave.ts b/packages/react-topology/src/pipelines/components/anchors/TaskNodeSourceAnchorSave.ts deleted file mode 100644 index e3b0db29287..00000000000 --- a/packages/react-topology/src/pipelines/components/anchors/TaskNodeSourceAnchorSave.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Point } from '../../../geom'; -import { AbstractAnchor } from '../../../anchors'; -import { Node } from '../../../types'; - -export default class TaskNodeSourceAnchor extends AbstractAnchor { - private pillWidth = 0; - private whenOffset = 0; - - constructor(owner: E, whenOffset: number, pillWidth: number) { - super(owner); - this.whenOffset = whenOffset; - this.pillWidth = pillWidth; - } - getLocation(): Point { - return this.getReferencePoint(); - } - - getReferencePoint(): Point { - const bounds = this.owner.getBounds(); - return new Point(bounds.x + this.pillWidth + this.whenOffset, bounds.y + bounds.height / 2); - } -} diff --git a/packages/react-topology/src/pipelines/components/anchors/TaskNodeTargetAnchor.ts b/packages/react-topology/src/pipelines/components/anchors/TaskNodeTargetAnchor.ts deleted file mode 100644 index 86b624a128f..00000000000 --- a/packages/react-topology/src/pipelines/components/anchors/TaskNodeTargetAnchor.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Point } from '../../../geom'; -import { AbstractAnchor } from '../../../anchors'; -import { Node } from '../../../types'; - -export default class TaskNodeTargetAnchor extends AbstractAnchor { - private whenOffset = 0; - - constructor(owner: E, whenOffset: number) { - super(owner); - this.whenOffset = whenOffset; - } - - getLocation(): Point { - return this.getReferencePoint(); - } - - getReferencePoint(): Point { - const bounds = this.owner.getBounds(); - return new Point(bounds.x + this.whenOffset, bounds.y + bounds.height / 2); - } -} diff --git a/packages/react-topology/src/pipelines/components/anchors/index.ts b/packages/react-topology/src/pipelines/components/anchors/index.ts deleted file mode 100644 index 6151e954e2b..00000000000 --- a/packages/react-topology/src/pipelines/components/anchors/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as TaskNodeSourceAnchor } from './TaskNodeSourceAnchor'; -export { default as TaskNodeTargetAnchor } from './TaskNodeTargetAnchor'; diff --git a/packages/react-topology/src/pipelines/components/edges/TaskEdge.tsx b/packages/react-topology/src/pipelines/components/edges/TaskEdge.tsx deleted file mode 100644 index 9aa8e11844d..00000000000 --- a/packages/react-topology/src/pipelines/components/edges/TaskEdge.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { Edge } from '../../../types'; -import { integralShapePath } from '../../utils'; - -interface TaskEdgeProps { - element: Edge; - className?: string; - nodeSeparation?: number; -} - -const TaskEdge: React.FunctionComponent = ({ element, className, nodeSeparation }) => { - const startPoint = element.getStartPoint(); - const endPoint = element.getEndPoint(); - const groupClassName = css(styles.topologyEdge, className); - const startIndent: number = element.getData()?.indent || 0; - - return ( - - - - ); -}; - -export default observer(TaskEdge); diff --git a/packages/react-topology/src/pipelines/components/edges/WhenEdge.tsx b/packages/react-topology/src/pipelines/components/edges/WhenEdge.tsx deleted file mode 100644 index 9013365aabe..00000000000 --- a/packages/react-topology/src/pipelines/components/edges/WhenEdge.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import * as React from 'react'; -import { Edge, EdgeTerminalType } from '../../../types'; -import { DefaultEdge } from '../../../components'; - -const WhenEdge: React.FC<{ element: Edge }> = ({ element }) => ( - -); - -export default WhenEdge; diff --git a/packages/react-topology/src/pipelines/components/edges/index.ts b/packages/react-topology/src/pipelines/components/edges/index.ts deleted file mode 100644 index 782ddda45b0..00000000000 --- a/packages/react-topology/src/pipelines/components/edges/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as TaskEdge } from './TaskEdge'; -export { default as WhenEdge } from './WhenEdge'; diff --git a/packages/react-topology/src/pipelines/components/groups/DefaultTaskGroup.tsx b/packages/react-topology/src/pipelines/components/groups/DefaultTaskGroup.tsx deleted file mode 100644 index 369b8c3b754..00000000000 --- a/packages/react-topology/src/pipelines/components/groups/DefaultTaskGroup.tsx +++ /dev/null @@ -1,182 +0,0 @@ -import * as React from 'react'; -import { observer } from 'mobx-react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import CollapseIcon from '@patternfly/react-icons/dist/esm/icons/compress-alt-icon'; -import NodeLabel from '../../../components/nodes/labels/NodeLabel'; -import { Layer } from '../../../components/layers'; -import { GROUPS_LAYER } from '../../../const'; -import { maxPadding, useCombineRefs, useHover } from '../../../utils'; -import { BadgeLocation, isGraph, LabelPosition, Node, NodeStyle } from '../../../types'; -import { - useDragNode, - WithContextMenuProps, - WithDndDropProps, - WithDragNodeProps, - WithSelectionProps -} from '../../../behavior'; -import { CollapsibleGroupProps } from '../../../components'; - -type DefaultTaskGroupProps = { - className?: string; - element: Node; - droppable?: boolean; - canDrop?: boolean; - dropTarget?: boolean; - dragging?: boolean; - hover?: boolean; - label?: string; // Defaults to element.getLabel() - secondaryLabel?: string; - showLabel?: boolean; // Defaults to true - truncateLength?: number; // Defaults to 13 - badge?: string; - badgeColor?: string; - badgeTextColor?: string; - badgeBorderColor?: string; - badgeClassName?: string; - badgeLocation?: BadgeLocation; - labelOffset?: number; // Space between the label and the group - labelIconClass?: string; // Icon to show in label - labelIcon?: string; - labelIconPadding?: number; -} & Partial; - -const DefaultTaskGroup: React.FunctionComponent = ({ - className, - element, - collapsible, - selected, - onSelect, - hover, - label, - secondaryLabel, - showLabel = true, - truncateLength, - canDrop, - dropTarget, - onContextMenu, - contextMenuOpen, - dragging, - dragNodeRef, - badge, - badgeColor, - badgeTextColor, - badgeBorderColor, - badgeClassName, - badgeLocation, - labelOffset = 17, - labelIconClass, - labelIcon, - labelIconPadding, - onCollapseChange -}) => { - const [hovered, hoverRef] = useHover(); - const [labelHover, labelHoverRef] = useHover(); - const dragLabelRef = useDragNode()[1]; - const refs = useCombineRefs(hoverRef, dragNodeRef); - const isHover = hover !== undefined ? hover : hovered; - const labelPosition = element.getLabelPosition(); - - let parent = element.getParent(); - let altGroup = false; - while (!isGraph(parent)) { - altGroup = !altGroup; - parent = parent.getParent(); - } - - const children = element.getNodes().filter(c => c.isVisible()); - - // cast to number and coerce - const padding = maxPadding(element.getStyle().padding ?? 17); - - const { minX, minY, maxX, maxY } = children.reduce( - (acc, child) => { - const bounds = child.getBounds(); - return { - minX: Math.min(acc.minX, bounds.x - padding), - minY: Math.min(acc.minY, bounds.y - padding), - maxX: Math.max(acc.maxX, bounds.x + bounds.width + padding), - maxY: Math.max(acc.maxY, bounds.y + bounds.height + padding) - }; - }, - { minX: Infinity, minY: Infinity, maxX: 0, maxY: 0 } - ); - - const [labelX, labelY] = React.useMemo(() => { - if (!showLabel || !(label || element.getLabel())) { - return [0, 0]; - } - switch (labelPosition) { - case LabelPosition.right: - return [maxX + labelOffset, minY + (maxY - minY) / 2]; - case LabelPosition.bottom: - default: - return [minX + (maxX - minX) / 2, maxY + labelOffset]; - } - }, [element, label, labelOffset, labelPosition, maxX, maxY, minX, minY, showLabel]); - - if (children.length === 0) { - return null; - } - - const groupClassName = css( - styles.topologyGroup, - className, - altGroup && 'pf-m-alt-group', - canDrop && 'pf-m-highlight', - dragging && 'pf-m-dragging', - selected && 'pf-m-selected' - ); - const innerGroupClassName = css( - styles.topologyGroup, - className, - altGroup && 'pf-m-alt-group', - canDrop && 'pf-m-highlight', - dragging && 'pf-m-dragging', - selected && 'pf-m-selected', - (isHover || labelHover) && 'pf-m-hover', - canDrop && dropTarget && 'pf-m-drop-target' - ); - - return ( - - - - - - - {showLabel && (label || element.getLabel()) && ( - : undefined} - onActionIconClick={() => onCollapseChange(element, true)} - > - {label || element.getLabel()} - - )} - - ); -}; - -export default observer(DefaultTaskGroup); diff --git a/packages/react-topology/src/pipelines/components/groups/index.ts b/packages/react-topology/src/pipelines/components/groups/index.ts deleted file mode 100644 index ff1e08c3f81..00000000000 --- a/packages/react-topology/src/pipelines/components/groups/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as DefaultTaskGroup } from './DefaultTaskGroup'; diff --git a/packages/react-topology/src/pipelines/components/index.ts b/packages/react-topology/src/pipelines/components/index.ts deleted file mode 100644 index 0c85f63ba31..00000000000 --- a/packages/react-topology/src/pipelines/components/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './anchors'; -export * from './nodes'; -export * from './edges'; -export * from './groups'; diff --git a/packages/react-topology/src/pipelines/components/nodes/FinallyNode.tsx b/packages/react-topology/src/pipelines/components/nodes/FinallyNode.tsx deleted file mode 100644 index 39c32957daa..00000000000 --- a/packages/react-topology/src/pipelines/components/nodes/FinallyNode.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import * as React from 'react'; -import TaskNode, { TaskNodeProps } from './TaskNode'; - -const FinallyNode: React.FC = props => ( - -); - -export default FinallyNode; diff --git a/packages/react-topology/src/pipelines/components/nodes/SpacerNode.tsx b/packages/react-topology/src/pipelines/components/nodes/SpacerNode.tsx deleted file mode 100644 index b0b37504a13..00000000000 --- a/packages/react-topology/src/pipelines/components/nodes/SpacerNode.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import * as React from 'react'; -import { observer } from '../../../mobx-exports'; -import { Node } from '../../../types'; - -const SpacerNode: React.FC<{ element: Node }> = () => ; - -export default observer(SpacerNode); diff --git a/packages/react-topology/src/pipelines/components/nodes/TaskBadge.tsx b/packages/react-topology/src/pipelines/components/nodes/TaskBadge.tsx deleted file mode 100644 index 9d67bf0a68f..00000000000 --- a/packages/react-topology/src/pipelines/components/nodes/TaskBadge.tsx +++ /dev/null @@ -1,75 +0,0 @@ -/* eslint patternfly-react/import-tokens-icons: 0 */ -import * as React from 'react'; -import { css } from '@patternfly/react-styles'; -import { global_palette_blue_50 as defaultBadgeFill } from '@patternfly/react-tokens/dist/js/global_palette_blue_50'; -import { global_palette_blue_300 as defaultBadgeBorder } from '@patternfly/react-tokens/dist/js/global_palette_blue_300'; -import { global_palette_blue_300 as defaultBadgeTextColor } from '@patternfly/react-tokens/dist/js/global_palette_blue_300'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { useSize } from '../../../utils'; -import { BadgeLocation } from '../../../types'; - -interface LabelBadgeProps { - className?: string; - x: number; - y: number; - badge?: React.ReactNode; - badgeColor?: string; - badgeTextColor?: string; - badgeBorderColor?: string; - badgeClassName?: string; - badgeLocation?: BadgeLocation; -} - -const TaskBadge = React.forwardRef( - ({ badge, badgeTextColor, badgeColor, badgeBorderColor, badgeClassName, className, x, y }, iconRef) => { - const [textSize, textRef] = useSize([]); - const classes = css(styles.topologyNodeLabelBadge, badgeClassName && badgeClassName, className && className); - - let rect = null; - let paddingX = 0; - let paddingY = 0; - let width = 0; - let height = 0; - - if (textSize) { - ({ height, width } = textSize); - paddingX = height / 2; - paddingY = height / 14; - height += paddingY * 2; - rect = ( - - ); - } - return ( - - {rect} - {typeof badge === 'string' ? ( - - {badge} - - ) : ( - {badge} - )} - - ); - } -); - -export default TaskBadge; diff --git a/packages/react-topology/src/pipelines/components/nodes/TaskNode.tsx b/packages/react-topology/src/pipelines/components/nodes/TaskNode.tsx deleted file mode 100644 index dcd36435a71..00000000000 --- a/packages/react-topology/src/pipelines/components/nodes/TaskNode.tsx +++ /dev/null @@ -1,446 +0,0 @@ -import * as React from 'react'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-pipelines'; -import topologyStyles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { Popover, PopoverProps, Tooltip } from '@patternfly/react-core'; -import { observer } from '../../../mobx-exports'; -import { AnchorEnd, Node, ScaleDetailsLevel } from '../../../types'; -import { RunStatus } from '../../types'; -import { useAnchor, WithContextMenuProps, WithSelectionProps } from '../../../behavior'; -import { truncateMiddle } from '../../../utils/truncate-middle'; -import { createSvgIdUrl, getNodeScaleTranslation, useCombineRefs, useHover, useSize } from '../../../utils'; -import { getRunStatusModifier, nonShadowModifiers } from '../../utils'; -import StatusIcon from '../../utils/StatusIcon'; -import { TaskNodeSourceAnchor, TaskNodeTargetAnchor } from '../anchors'; -import LabelActionIcon from '../../../components/nodes/labels/LabelActionIcon'; -import LabelContextMenu from '../../../components/nodes/labels/LabelContextMenu'; -import NodeShadows, { - NODE_SHADOW_FILTER_ID_DANGER, - NODE_SHADOW_FILTER_ID_HOVER -} from '../../../components/nodes/NodeShadows'; -import LabelBadge from '../../../components/nodes/labels/LabelBadge'; -import LabelIcon from '../../../components/nodes/labels/LabelIcon'; -import useDetailsLevel from '../../../hooks/useDetailsLevel'; -import { useScaleNode } from '../../../hooks'; - -const STATUS_ICON_SIZE = 16; -const SCALE_UP_TIME = 200; - -export type TaskNodeProps = { - children?: React.ReactNode; - element: Node; - className?: string; - paddingX?: number; - paddingY?: number; - nameLabelClass?: string; - status?: RunStatus; - statusIconSize?: number; - showStatusState?: boolean; - scaleNode?: boolean; // Whether or not to scale the node, best on hover when details are hidden - hideDetailsAtMedium?: boolean; // Whether or not to hide details at medium scale - hiddenDetailsShownStatuses?: RunStatus[]; // Statuses to show at when details are hidden - badge?: string; - badgeColor?: string; - badgeTextColor?: string; - badgeBorderColor?: string; - badgeClassName?: string; - /** @deprecated Use badgePopoverParams instead */ - badgePopoverProps?: string; - badgeTooltip?: React.ReactNode; // Set to use a tooltip on the badge, takes precedence over the badgePopoverParams - badgePopoverParams?: PopoverProps; // Set to use a popover on the badge, ignored if the badgeTooltip parameter is set - taskIconClass?: string; // Icon to show for the task - taskIcon?: React.ReactNode; - taskIconTooltip?: React.ReactNode; - taskIconPadding?: number; - hover?: boolean; - truncateLength?: number; - disableTooltip?: boolean; - toolTip?: React.ReactNode; - hasWhenExpression?: boolean; - whenSize?: number; - whenOffset?: number; - actionIcon?: React.ReactElement; - actionIconClassName?: string; - onActionIconClick?: (e: React.MouseEvent) => void; -} & Partial & - Partial; - -const TaskNode: React.FC }> = ({ - innerRef, - element, - className, - paddingX = 8, - paddingY = 8, - status, - statusIconSize = STATUS_ICON_SIZE, - showStatusState = true, - scaleNode, - hideDetailsAtMedium, - hiddenDetailsShownStatuses = [RunStatus.Failed, RunStatus.FailedToStart, RunStatus.Cancelled], - badge, - badgeColor, - badgeTextColor, - badgeBorderColor, - badgeClassName = styles.topologyPipelinesPillBadge, - badgeTooltip, - badgePopoverProps, - badgePopoverParams, - taskIconClass, - taskIcon, - taskIconTooltip, - taskIconPadding = 4, - hover, - truncateLength = 14, - toolTip, - disableTooltip = false, - selected, - onSelect, - hasWhenExpression = false, - whenSize = 0, - whenOffset = 0, - onContextMenu, - contextMenuOpen, - actionIcon, - actionIconClassName, - onActionIconClick, - children -}) => { - const [hovered, innerHoverRef] = useHover(); - const hoverRef = useCombineRefs(innerRef, innerHoverRef); - const isHover = hover !== undefined ? hover : hovered; - const { width } = element.getBounds(); - const label = truncateMiddle(element.getLabel(), { length: truncateLength, omission: '...' }); - const [textSize, textRef] = useSize([label, className]); - const [statusSize, statusRef] = useSize([status, showStatusState, statusIconSize]); - const [badgeSize, badgeRef] = useSize([badge]); - const [actionSize, actionRef] = useSize([actionIcon, paddingX]); - const [contextSize, contextRef] = useSize([onContextMenu, paddingX]); - const detailsLevel = useDetailsLevel(); - - if (badgePopoverProps) { - // eslint-disable-next-line no-console - console.warn('badgePopoverProps is deprecated. Use badgePopoverParams instead.'); - } - - const textWidth = textSize?.width ?? 0; - const textHeight = textSize?.height ?? 0; - useAnchor( - // Include scaleNode to cause an update when it changes - // eslint-disable-next-line react-hooks/exhaustive-deps - React.useCallback((node: Node) => new TaskNodeSourceAnchor(node, detailsLevel, statusIconSize + 4), [ - detailsLevel, - statusIconSize, - scaleNode - ]), - AnchorEnd.source - ); - useAnchor( - React.useCallback((node: Node) => new TaskNodeTargetAnchor(node, hasWhenExpression ? 0 : whenSize + whenOffset), [ - hasWhenExpression, - whenSize, - whenOffset - ]), - AnchorEnd.target - ); - - const { - height, - statusStartX, - textStartX, - actionStartX, - contextStartX, - pillWidth, - badgeStartX, - iconWidth, - iconStartX - } = React.useMemo(() => { - if (!textSize) { - return { - height: 0, - statusStartX: 0, - textStartX: 0, - actionStartX: 0, - contextStartX: 0, - pillWidth: 0, - badgeStartX: 0, - iconWidth: 0, - iconStartX: 0 - }; - } - const height: number = textHeight + 2 * paddingY; - const startX = paddingX + paddingX / 2; - - const iconWidth = taskIconClass || taskIcon ? height - taskIconPadding : 0; - const iconStartX = -(iconWidth * 0.75); - - const statusStartX = startX - statusIconSize / 4; // Adjust for icon padding - const statusSpace = status && showStatusState && statusSize ? statusSize.width + paddingX : 0; - - const textStartX = startX + statusSpace; - const textSpace = textWidth + paddingX; - - const badgeStartX = textStartX + textSpace; - const badgeSpace = badge && badgeSize ? badgeSize.width + paddingX : 0; - - const actionStartX = badgeStartX + badgeSpace; - const actionSpace = actionIcon && actionSize ? actionSize.width + paddingX : 0; - - const contextStartX = actionStartX + actionSpace; - const contextSpace = onContextMenu && contextSize ? contextSize.width + paddingX / 2 : 0; - - const pillWidth = contextStartX + contextSpace + paddingX / 2; - - return { - height, - statusStartX, - textStartX, - actionStartX, - contextStartX, - badgeStartX, - iconWidth, - iconStartX, - pillWidth - }; - }, [ - textSize, - textHeight, - textWidth, - paddingY, - paddingX, - taskIconClass, - taskIcon, - taskIconPadding, - statusIconSize, - status, - showStatusState, - statusSize, - badgeSize, - badge, - actionIcon, - actionSize, - onContextMenu, - contextSize - ]); - - React.useEffect(() => { - const sourceEdges = element.getSourceEdges(); - sourceEdges.forEach(edge => { - const data = edge.getData(); - edge.setData({ ...(data || {}), indent: detailsLevel === ScaleDetailsLevel.high ? width - pillWidth : 0 }); - }); - }, [detailsLevel, element, pillWidth, width]); - - const scale = element.getGraph().getScale(); - const nodeScale = useScaleNode(scaleNode, scale, SCALE_UP_TIME); - const { translateX, translateY } = getNodeScaleTranslation(element, nodeScale, scaleNode); - - const nameLabel = ( - - {label} - - ); - - const runStatusModifier = getRunStatusModifier(status); - const pillClasses = css( - styles.topologyPipelinesPill, - className, - isHover && styles.modifiers.hover, - runStatusModifier, - selected && styles.modifiers.selected, - onSelect && styles.modifiers.selectable - ); - - let filter: string; - if (runStatusModifier === styles.modifiers.danger) { - filter = createSvgIdUrl(NODE_SHADOW_FILTER_ID_DANGER); - } else if (isHover && !nonShadowModifiers.includes(runStatusModifier)) { - filter = createSvgIdUrl(NODE_SHADOW_FILTER_ID_HOVER); - } - - const taskIconComponent = (taskIconClass || taskIcon) && ( - - ); - - const badgeLabel = badge ? ( - - ) : null; - - let badgeComponent: React.ReactNode; - if (badgeLabel && badgeTooltip) { - badgeComponent = {badgeLabel}; - } else if (badgeLabel && badgePopoverParams) { - badgeComponent = ( - e.stopPropagation()}> - {badgeLabel} - - ); - } else { - badgeComponent = badgeLabel; - } - - const renderTask = () => { - if (showStatusState && !scaleNode && hideDetailsAtMedium && detailsLevel !== ScaleDetailsLevel.high) { - const statusBackgroundRadius = statusIconSize / 2 + 4; - const height = element.getBounds().height; - const upScale = 1 / scale; - - return ( - - - {status && (!hiddenDetailsShownStatuses || hiddenDetailsShownStatuses.includes(status)) ? ( - - - - - - ) : null} - - ); - } - return ( - - - - - {element.getLabel() !== label && !disableTooltip ? ( - - {nameLabel} - - ) : ( - nameLabel - )} - - {status && showStatusState && ( - - - - - - )} - {taskIconComponent && - (taskIconTooltip ? {taskIconComponent} : taskIconComponent)} - {badgeComponent} - {actionIcon && ( - <> - - - - )} - {textSize && onContextMenu && ( - <> - - - - )} - {children} - - ); - }; - - return ( - - {!toolTip || disableTooltip ? ( - renderTask() - ) : ( - - {renderTask()} - - )} - - ); -}; - -export default observer( - React.forwardRef((props: TaskNodeProps, ref: React.Ref) => ) -); diff --git a/packages/react-topology/src/pipelines/components/nodes/index.ts b/packages/react-topology/src/pipelines/components/nodes/index.ts deleted file mode 100644 index 3fdcc26ce9b..00000000000 --- a/packages/react-topology/src/pipelines/components/nodes/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { default as FinallyNode } from './FinallyNode'; -export { default as SpacerNode } from './SpacerNode'; -export { default as StatusIcon } from '../../utils/StatusIcon'; -export { default as TaskNode } from './TaskNode'; -export { default as WhenNode } from '../../decorators/WhenDecorator'; diff --git a/packages/react-topology/src/pipelines/const.ts b/packages/react-topology/src/pipelines/const.ts deleted file mode 100644 index a987c4fd7a5..00000000000 --- a/packages/react-topology/src/pipelines/const.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const NODE_SEPARATION_HORIZONTAL = 70; -export const NODE_SEPARATION_VERTICAL = 35; - -export enum DrawDesign { - INTEGRAL_SHAPE = 'integral-shape', - STRAIGHT = 'line' -} - -export const DEFAULT_TASK_NODE_TYPE = 'DEFAULT_TASK_NODE'; -export const DEFAULT_SPACER_NODE_TYPE = 'DEFAULT_SPACER_NODE'; -export const DEFAULT_EDGE_TYPE = 'DEFAULT_EDGE'; -export const DEFAULT_FINALLY_NODE_TYPE = 'DEFAULT_FINALLY_NODE'; diff --git a/packages/react-topology/src/pipelines/decorators/WhenDecorator.tsx b/packages/react-topology/src/pipelines/decorators/WhenDecorator.tsx deleted file mode 100644 index c71552eaa43..00000000000 --- a/packages/react-topology/src/pipelines/decorators/WhenDecorator.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import * as React from 'react'; -import { Tooltip } from '@patternfly/react-core'; -import { css } from '@patternfly/react-styles'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-pipelines'; -import topologyStyles from '@patternfly/react-styles/css/components/Topology/topology-components'; -import { observer } from '../../mobx-exports'; -import { Node } from '../../types'; -import { WhenStatus } from '../types'; -import { WithSelectionProps } from '../../behavior'; -import { getWhenStatusModifier } from '../utils'; - -export const DEFAULT_WHEN_SIZE = 12; -export const DEFAULT_WHEN_OFFSET = 12; - -type WhenDecoratorProps = { - element: Node; - className?: string; - leftOffset?: number; - edgeLength?: number; - width?: number; - height?: number; - nameLabelClass?: string; - status?: WhenStatus; - showStatusState?: boolean; - disableTooltip?: boolean; - toolTip?: React.ReactNode; -} & Partial; - -export const WhenDecorator: React.FC = ({ - element, - width = DEFAULT_WHEN_SIZE, - height = DEFAULT_WHEN_SIZE, - className, - status, - leftOffset = DEFAULT_WHEN_OFFSET, - edgeLength = DEFAULT_WHEN_OFFSET, - toolTip, - disableTooltip = false -}) => { - const { height: taskHeight } = element.getBounds(); - const y = taskHeight / 2 - height / 2; - const startX = -width - leftOffset; - const points = `${startX + width / 2} ${y} ${startX + width} ${y + height / 2} ${startX + width / 2} ${y + - height} ${startX} ${y + height / 2}`; - const diamondNode = ( - - - - - - ); - - return toolTip && !disableTooltip ? ( - {toolTip}
}> - {diamondNode} - - ) : ( - diamondNode - ); -}; -WhenDecorator.displayName = 'WhenDecorator'; - -export default observer(WhenDecorator); diff --git a/packages/react-topology/src/pipelines/decorators/index.ts b/packages/react-topology/src/pipelines/decorators/index.ts deleted file mode 100644 index 705922d3b8a..00000000000 --- a/packages/react-topology/src/pipelines/decorators/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './WhenDecorator'; diff --git a/packages/react-topology/src/pipelines/index.ts b/packages/react-topology/src/pipelines/index.ts deleted file mode 100644 index b1e34879698..00000000000 --- a/packages/react-topology/src/pipelines/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './components'; -export * from './decorators'; -export * from './layouts'; -export * from './utils'; -export * from './const'; -export * from './types'; diff --git a/packages/react-topology/src/pipelines/layouts/PipelineDagreLayout.ts b/packages/react-topology/src/pipelines/layouts/PipelineDagreLayout.ts deleted file mode 100644 index a6321cbc7e6..00000000000 --- a/packages/react-topology/src/pipelines/layouts/PipelineDagreLayout.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Graph, Layout } from '../../types'; -import { NODE_SEPARATION_HORIZONTAL, NODE_SEPARATION_VERTICAL } from '../const'; -import { DagreLayout, DagreLayoutOptions } from '../../layouts/DagreLayout'; - -export class PipelineDagreLayout extends DagreLayout implements Layout { - constructor(graph: Graph, options?: Partial) { - super(graph, { - linkDistance: 0, - nodeDistance: 0, - groupDistance: 0, - collideDistance: 0, - simulationSpeed: 0, - chargeStrength: 0, - allowDrag: false, - layoutOnDrag: false, - nodesep: NODE_SEPARATION_VERTICAL, - ranksep: NODE_SEPARATION_HORIZONTAL, - edgesep: 50, - ranker: 'longest-path', - rankdir: 'LR', - marginx: 20, - marginy: 20, - ...options - }); - } - set nodesep(nodesep: number) { - super.dagreOptions.nodesep = nodesep; - } - set ranksep(ranksep: number) { - super.dagreOptions.ranksep = ranksep; - } -} diff --git a/packages/react-topology/src/pipelines/layouts/index.ts b/packages/react-topology/src/pipelines/layouts/index.ts deleted file mode 100644 index 64865e28f39..00000000000 --- a/packages/react-topology/src/pipelines/layouts/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './PipelineDagreLayout'; diff --git a/packages/react-topology/src/pipelines/types.ts b/packages/react-topology/src/pipelines/types.ts deleted file mode 100644 index fed54730cb1..00000000000 --- a/packages/react-topology/src/pipelines/types.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NodeModel } from '../types'; - -export enum RunStatus { - Succeeded = 'Succeeded', - Failed = 'Failed', - Running = 'Running', - InProgress = 'InProgress', - FailedToStart = 'FailedToStart', - Skipped = 'Skipped', - Cancelled = 'Cancelled', - Pending = 'Pending', - Idle = 'Idle' -} - -export enum WhenStatus { - Met = 'Met', - Unmet = 'Unmet', - Pending = 'Pending', - InProgress = 'InProgress' -} - -export type PipelineNodeModel = NodeModel & { - runAfterTasks?: string[]; -}; diff --git a/packages/react-topology/src/pipelines/utils/StatusIcon.tsx b/packages/react-topology/src/pipelines/utils/StatusIcon.tsx deleted file mode 100644 index 0bf48d683ec..00000000000 --- a/packages/react-topology/src/pipelines/utils/StatusIcon.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import * as React from 'react'; -import AngleDoubleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-double-right-icon'; -import ExclamationTriangleIcon from '@patternfly/react-icons/dist/esm/icons/exclamation-triangle-icon'; -import CheckCircleIcon from '@patternfly/react-icons/dist/esm/icons/check-circle-icon'; -import CircleIcon from '@patternfly/react-icons/dist/esm/icons/circle-icon'; -import ExclamationCircleIcon from '@patternfly/react-icons/dist/esm/icons/exclamation-circle-icon'; -import NotStartedIcon from '@patternfly/react-icons/dist/esm/icons/not-started-icon'; -import HourglassHalfIcon from '@patternfly/react-icons/dist/esm/icons/hourglass-half-icon'; -import SyncAltIcon from '@patternfly/react-icons/dist/esm/icons/sync-alt-icon'; -import InProgressIcon from '@patternfly/react-icons/dist/esm/icons/in-progress-icon'; -import { RunStatus } from '../types'; - -interface StatusIconProps { - className?: string; - status: RunStatus; - height?: number; - width?: number; -} - -const StatusIcon: React.FC = ({ status, ...props }) => { - switch (status) { - case RunStatus.InProgress: - return ; - - case RunStatus.Running: - return ; - - case RunStatus.Succeeded: - return ; - - case RunStatus.Failed: - case RunStatus.FailedToStart: - return ; - - case RunStatus.Idle: - return ; - - case RunStatus.Pending: - return ; - - case RunStatus.Cancelled: - return ; - - case RunStatus.Skipped: - return ; - - default: - return ; - } -}; - -export default StatusIcon; diff --git a/packages/react-topology/src/pipelines/utils/draw-utils.ts b/packages/react-topology/src/pipelines/utils/draw-utils.ts deleted file mode 100644 index 923f3ccab05..00000000000 --- a/packages/react-topology/src/pipelines/utils/draw-utils.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { Point } from '../../geom'; -import { DrawDesign, NODE_SEPARATION_HORIZONTAL } from '../const'; - -type SingleDraw = (p: Point) => string; -type DoubleDraw = (p1: Point, p2: Point, startIndentX?: number, junctionOffset?: number) => string; -type TripleDraw = (p1: Point, p2: Point, p3: Point) => string; -type DetermineDirection = (p1: Point, p2: Point) => boolean; - -const join = (...segments: string[]) => segments.filter(seg => !!seg).join(' '); - -const leftRight: DetermineDirection = (p1, p2) => p1.x < p2.x; -const topDown: DetermineDirection = (p1, p2) => p1.y < p2.y; -const bottomUp: DetermineDirection = (p1, p2) => p1.y > p2.y; - -const point: SingleDraw = p => `${p.x},${p.y}`; -const moveTo: SingleDraw = p => `M ${point(p)}`; -const lineTo: SingleDraw = p => `L ${point(p)}`; -const quadTo: DoubleDraw = (corner, end) => `Q ${point(corner)} ${point(end)}`; - -// TODO: Try to simplify -// x should not be greater than (NODE_SEPARATION_HORIZONTAL / 2) -const CURVE_SIZE = { x: 8, y: 10 }; -const curve: TripleDraw = (fromPoint, cornerPoint, toPoint) => { - const topToBottom = topDown(fromPoint, toPoint); - if (topToBottom) { - const rightAndDown = leftRight(fromPoint, cornerPoint) && topDown(cornerPoint, toPoint); - const downAndRight = topDown(fromPoint, cornerPoint) && leftRight(cornerPoint, toPoint); - if (rightAndDown) { - return join( - lineTo(cornerPoint.clone().translate(-CURVE_SIZE.x, 0)), - quadTo(cornerPoint, cornerPoint.clone().translate(0, CURVE_SIZE.y)) - ); - } - if (downAndRight) { - return join( - lineTo(cornerPoint.clone().translate(0, -CURVE_SIZE.y)), - quadTo(cornerPoint, cornerPoint.clone().translate(CURVE_SIZE.x, 0)) - ); - } - } else { - const rightAndUp = leftRight(fromPoint, cornerPoint) && bottomUp(cornerPoint, toPoint); - const upAndRight = bottomUp(fromPoint, cornerPoint) && leftRight(cornerPoint, toPoint); - if (rightAndUp) { - return join( - lineTo(cornerPoint.clone().translate(-CURVE_SIZE.x, 0)), - quadTo(cornerPoint, cornerPoint.clone().translate(0, -CURVE_SIZE.y)) - ); - } - if (upAndRight) { - return join( - lineTo(cornerPoint.clone().translate(0, CURVE_SIZE.y)), - quadTo(cornerPoint, cornerPoint.clone().translate(CURVE_SIZE.x, 0)) - ); - } - } - - return ''; -}; - -export const straightPath: DoubleDraw = (start, finish) => join(moveTo(start), lineTo(finish)); - -export const integralShapePath: DoubleDraw = ( - start, - finish, - startIndentX = 0, - nodeSeparation = NODE_SEPARATION_HORIZONTAL -) => { - // Integral shape: ∫ - let firstCurve: string = null; - let secondCurve: string = null; - - if (start.y !== finish.y) { - const cornerX = Math.floor(start.x + nodeSeparation / 2); - const firstCorner = new Point(cornerX, start.y); - const secondCorner = new Point(cornerX, finish.y); - - firstCurve = curve(start, firstCorner, secondCorner); - secondCurve = curve(firstCorner, secondCorner, finish); - } - - const indentedStart = new Point(start.x - startIndentX, start.y); - return join(moveTo(indentedStart), firstCurve, secondCurve, lineTo(finish)); -}; - -export const path = (start: Point, finish: Point, drawDesign?: DrawDesign) => { - switch (drawDesign) { - case DrawDesign.INTEGRAL_SHAPE: - return integralShapePath(start, finish); - case DrawDesign.STRAIGHT: - default: - return straightPath(start, finish); - } -}; diff --git a/packages/react-topology/src/pipelines/utils/index.ts b/packages/react-topology/src/pipelines/utils/index.ts deleted file mode 100644 index ca202efded4..00000000000 --- a/packages/react-topology/src/pipelines/utils/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './draw-utils'; -export * from './utils'; -export { default as StatusIcon } from './StatusIcon'; diff --git a/packages/react-topology/src/pipelines/utils/utils.ts b/packages/react-topology/src/pipelines/utils/utils.ts deleted file mode 100644 index 89692008e62..00000000000 --- a/packages/react-topology/src/pipelines/utils/utils.ts +++ /dev/null @@ -1,203 +0,0 @@ -import styles from '@patternfly/react-styles/css/components/Topology/topology-pipelines'; -import { PipelineNodeModel, RunStatus, WhenStatus } from '../types'; -import { EdgeModel } from '../../types'; -import { DEFAULT_EDGE_TYPE, DEFAULT_FINALLY_NODE_TYPE, DEFAULT_SPACER_NODE_TYPE } from '../const'; - -export const nonShadowModifiers: string[] = [ - styles.modifiers.danger, - styles.modifiers.warning, - styles.modifiers.success, - styles.modifiers.skipped, - styles.modifiers.inProgress -]; - -export const getRunStatusModifier = (status: RunStatus): string => { - switch (status) { - case RunStatus.Failed: - case RunStatus.FailedToStart: - return styles.modifiers.danger; - case RunStatus.Succeeded: - return styles.modifiers.success; - case RunStatus.Cancelled: - return styles.modifiers.warning; - case RunStatus.Skipped: - return styles.modifiers.skipped; - case RunStatus.Running: - return styles.modifiers.running; - case RunStatus.InProgress: - return styles.modifiers.inProgress; - case RunStatus.Pending: - return styles.modifiers.pending; - case RunStatus.Idle: - return styles.modifiers.idle; - default: - return ''; - } -}; - -export const getWhenStatusModifier = (status: WhenStatus): string => { - switch (status) { - case WhenStatus.Met: - return styles.modifiers.success; - case WhenStatus.Unmet: - return styles.modifiers.unmet; - case WhenStatus.InProgress: - case WhenStatus.Pending: - return styles.modifiers.inProgress; - default: - return ''; - } -}; - -const getSpacerId = (ids: string[]): string => - [...ids] - .sort((a, b) => a.localeCompare(b)) - .reduce((acc, ref) => { - if (acc) { - return `${acc}|${ref}`; - } - return ref; - }, ''); - -export const getSpacerNodes = ( - nodes: PipelineNodeModel[], - spacerNodeType = DEFAULT_SPACER_NODE_TYPE, - finallyNodeTypes: string[] = [DEFAULT_FINALLY_NODE_TYPE] -): PipelineNodeModel[] => { - interface ParallelNodeMap { - [id: string]: PipelineNodeModel[]; - } - const finallyNodes = nodes.filter(n => finallyNodeTypes.includes(n.type)); - // Collect only multiple run-afters - const multipleRunBeforeMap: ParallelNodeMap = nodes.reduce((acc, node) => { - const { runAfterTasks } = node; - if (runAfterTasks && runAfterTasks.length > 1) { - const id: string = getSpacerId(runAfterTasks); - if (!Array.isArray(acc[id])) { - acc[id] = []; - } - acc[id].push(node); - } - return acc; - }, {} as ParallelNodeMap); - - // Trim out single occurrences - const multiParallelToParallelList: ParallelNodeMap = Object.keys(multipleRunBeforeMap).reduce((acc, key) => { - if (multipleRunBeforeMap[key].length > 1) { - acc[key] = multipleRunBeforeMap[key]; - } - return acc; - }, {}); - - const spacerNodes: PipelineNodeModel[] = []; - - // Insert a spacer node between the multiple nodes on the sides of a parallel-to-parallel - Object.keys(multiParallelToParallelList).forEach(key => { - spacerNodes.push({ - id: key, - type: spacerNodeType - }); - }); - - if (finallyNodes.length > 1) { - const finallyId = getSpacerId(finallyNodes.map(n => n.id)); - spacerNodes.push({ - id: finallyId, - type: spacerNodeType, - width: 1, - height: 1 - }); - } - - return spacerNodes; -}; - -export const getEdgesFromNodes = ( - nodes: PipelineNodeModel[], - spacerNodeType = DEFAULT_SPACER_NODE_TYPE, - edgeType = DEFAULT_EDGE_TYPE, - spacerEdgeType = DEFAULT_EDGE_TYPE, - finallyNodeTypes: string[] = [DEFAULT_FINALLY_NODE_TYPE], - finallyEdgeType = DEFAULT_EDGE_TYPE -): EdgeModel[] => { - const edges: EdgeModel[] = []; - - const spacerNodes = nodes.filter(n => n.type === spacerNodeType); - const taskNodes = nodes.filter(n => n.type !== spacerNodeType); - const finallyNodes = nodes.filter(n => finallyNodeTypes.includes(n.type)); - const lastTasks = nodes - .filter(n => !finallyNodeTypes.includes(n.type)) - .filter(n => spacerNodeType !== n.type) - .filter(t => !nodes.find(n => n.runAfterTasks?.includes(t.id))); - - spacerNodes.forEach(spacer => { - const sourceIds = spacer.id.split('|'); - sourceIds.forEach(sourceId => { - const node = nodes.find(n => n.id === sourceId); - if (node && !finallyNodes.includes(node)) { - edges.push({ - id: `${sourceId}-${spacer.id}`, - type: spacerEdgeType, - source: sourceId, - target: spacer.id - }); - } - }); - }); - - taskNodes.forEach(node => { - if (node.runAfterTasks) { - const spacerId: string = getSpacerId([...node.runAfterTasks]); - const spacer = spacerNodes.find(n => n.id === spacerId); - if (spacer) { - edges.push({ - id: `${spacer.id}-${node.id}`, - type: spacerEdgeType, - source: spacer.id, - target: node.id - }); - } else if (node.runAfterTasks) { - node.runAfterTasks.forEach(afterId => { - edges.push({ - id: `${afterId}-${node.id}`, - type: edgeType, - source: afterId, - target: node.id - }); - }); - } - } - }); - - if (finallyNodes.length > 1) { - const finallyId = getSpacerId(finallyNodes.map(n => n.id)); - finallyNodes.forEach(finallyNode => { - edges.push({ - id: `${finallyId}-${finallyNode.id}`, - type: spacerEdgeType, - source: finallyId, - target: finallyNode.id - }); - }); - lastTasks.forEach(lastTaskNode => { - edges.push({ - id: `${lastTaskNode.id}-${finallyId}`, - type: spacerEdgeType, - source: lastTaskNode.id, - target: finallyId - }); - }); - } - if (finallyNodes.length === 1) { - lastTasks.forEach(lastTaskNode => { - edges.push({ - id: `finallyId-${lastTaskNode.id}-${finallyNodes[0].id}`, - type: finallyEdgeType, - source: lastTaskNode.id, - target: finallyNodes[0].id - }); - }); - } - - return edges; -}; diff --git a/packages/react-topology/src/types.ts b/packages/react-topology/src/types.ts deleted file mode 100644 index 9649bbc6572..00000000000 --- a/packages/react-topology/src/types.ts +++ /dev/null @@ -1,352 +0,0 @@ -import { ComponentType } from 'react'; -import Point from './geom/Point'; -import Dimensions from './geom/Dimensions'; -import Rect from './geom/Rect'; -import { Padding, Translatable } from './geom/types'; - -// x, y -export type PointTuple = [number, number]; - -export interface Layout { - layout(): void; - stop(): void; - destroy(): void; -} - -export interface Model { - graph?: GraphModel; - nodes?: NodeModel[]; - edges?: EdgeModel[]; -} - -export enum AnchorEnd { - target, - source, - both -} - -export interface NodeStyle { - padding?: Padding; -} - -export enum TopologyQuadrant { - upperLeft = 'upperLeft', - upperRight = 'upperRight', - lowerLeft = 'lowerLeft', - lowerRight = 'lowerRight' -} - -export enum NodeShape { - circle = 'circle', // backward compatibility - ellipse = 'ellipse', - rect = 'rect', - rhombus = 'rhombus', - trapezoid = 'trapezoid', - hexagon = 'hexagon', - octagon = 'octagon', - stadium = 'stadium' -} - -export enum NodeStatus { - default = 'default', - info = 'info', - success = 'success', - warning = 'warning', - danger = 'danger' -} - -export enum EdgeStyle { - default = 'default', - solid = 'solid', - dotted = 'dotted', - dashed = 'dashed', - dashedMd = 'dashedMd', - dashedLg = 'dashedLg', - dashedXl = 'dashedXl' -} - -export enum EdgeAnimationSpeed { - none = 'none', - slow = 'slow', - mediumSlow = 'mediumSlow', - medium = 'medium', - mediumFast = 'mediumFast', - fast = 'fast' -} - -export enum EdgeTerminalType { - none = 'none', - directional = 'directional', - directionalAlt = 'directionalAlt', - circle = 'circle', - square = 'square', - cross = 'cross' -} - -export enum LabelPosition { - right, - bottom -} - -export enum BadgeLocation { - inner, - below -} - -export enum ModelKind { - graph = 'graph', - node = 'node', - edge = 'edge' -} - -export interface ElementModel { - id: string; - type: string; - label?: string; - visible?: boolean; - children?: string[]; - data?: any; - style?: { [key: string]: any }; -} - -export interface NodeModel extends ElementModel { - x?: number; - y?: number; - width?: number; - height?: number; - group?: boolean; - shape?: NodeShape; - status?: NodeStatus; - collapsed?: boolean; - labelPosition?: LabelPosition; -} - -export interface EdgeModel extends ElementModel { - source?: string; - target?: string; - edgeStyle?: EdgeStyle; - animationSpeed?: EdgeAnimationSpeed; - bendpoints?: PointTuple[]; -} - -// Scale extent: [min scale, max scale] -export type ScaleExtent = [number, number]; - -export enum ScaleDetailsLevel { - high = 'high', - medium = 'medium', - low = 'low' -} - -export interface ScaleDetailsThresholds { - low: number; - medium: number; -} - -type Never = { [K in keyof Type]?: never }; -type EitherNotBoth = (TypeA & Never) | (TypeB & Never); - -interface ViewPaddingPixels { - padding: number; -} -interface ViewPaddingPercentage { - paddingPercentage: number; -} - -export type ViewPaddingSettings = EitherNotBoth; - -export interface GraphModel extends ElementModel { - layout?: string; - x?: number; - y?: number; - scale?: number; - scaleExtent?: ScaleExtent; - layers?: string[]; -} - -export interface Anchor { - getLocation(reference: Point): Point; - getReferencePoint(): Point; -} - -export interface GraphElement extends WithState { - destroy(): void; - getKind(): ModelKind; - getLabel(): string; - setLabel(label: string): void; - getOrderKey(): number[]; - getController(): Controller; - setController(controller?: Controller): void; - getGraph(): Graph; - getParent(): GraphElement; - hasParent(): boolean; - setParent(parent: GraphElement | undefined): void; - getId(): string; - setId(id: string): void; - getType(): string; - setType(type: string): void; - setVisible(visible: boolean): void; - isVisible(): boolean; - getData(): D | undefined; - setData(data: D | undefined): void; - getChildren(): GraphElement[]; - insertChild(child: GraphElement, index: number): void; - appendChild(child: GraphElement): void; - removeChild(child: GraphElement): void; - remove(): void; - setModel(model: E): void; - toModel(): ElementModel; - raise(): void; - getStyle(): T; - translateToAbsolute(t: Translatable): void; - translateFromAbsolute(t: Translatable): void; - translateToParent(t: Translatable): void; - translateFromParent(t: Translatable): void; -} - -export interface Node extends GraphElement { - getAnchor(end: AnchorEnd, type?: string): Anchor; - setAnchor(anchor: Anchor, end?: AnchorEnd, type?: string): void; - getNodes(): Node[]; - // TODO return an immutable bounds, position, dimensions? - getBounds(): Rect; - setBounds(bounds: Rect): void; - getPosition(): Point; - setPosition(location: Point): void; - getDimensions(): Dimensions; - setDimensions(dimensions: Dimensions): void; - isGroup(): boolean; - setGroup(group: boolean): void; - isCollapsed(): boolean; - setCollapsed(collapsed: boolean): void; - getLabelPosition(): LabelPosition; - setLabelPosition(position: LabelPosition): void; - getNodeShape(): NodeShape; - setNodeShape(shape: NodeShape): void; - getNodeStatus(): NodeStatus; - setNodeStatus(shape: NodeStatus): void; - getSourceEdges(): Edge[]; - getTargetEdges(): Edge[]; - getAllNodeChildren(): Node[]; // Return all children regardless of collapse status or child groups' collapsed status - isDimensionsInitialized(): boolean; - isPositioned(): boolean; -} - -export interface Edge extends GraphElement { - getSource(): Node; - setSource(source: Node): void; - getTarget(): Node; - getEdgeStyle(): EdgeStyle; - setEdgeStyle(edgeStyle: EdgeStyle): void; - getEdgeAnimationSpeed(): EdgeAnimationSpeed; - setEdgeAnimationSpeed(speed: EdgeAnimationSpeed): void; - setTarget(target: Node): void; - getSourceAnchorNode(): Node; - getTargetAnchorNode(): Node; - getStartPoint(): Point; - setStartPoint(x?: number, y?: number): void; - getEndPoint(): Point; - setEndPoint(x?: number, y?: number): void; - getBendpoints(): Point[]; - setBendpoints(points: Point[]): void; - removeBendpoint(point: Point | number): void; -} - -export interface Graph extends GraphElement { - getNodes(): Node[]; - getEdges(): Edge[]; - getBounds(): Rect; - setBounds(bounds: Rect): void; - getPosition(): Point; - setPosition(location: Point): void; - getDimensions(): Dimensions; - setDimensions(dimensions: Dimensions): void; - getScaleExtent(): ScaleExtent; - setScaleExtent(scaleExtent: ScaleExtent): void; - getScale(): number; - setScale(scale: number): void; - setDetailsLevelThresholds(settings: ScaleDetailsThresholds | undefined): void; - getDetailsLevelThresholds(): Readonly | undefined; - getDetailsLevel(): ScaleDetailsLevel; - getLayout(): string | undefined; - setLayout(type: string | undefined): void; - layout(): void; - getLayers(): string[]; - setLayers(layers: string[]): void; - - // viewport operations - reset(): void; - scaleBy(scale: number, location?: Point): void; - fit(padding?: number): void; - panIntoView(element: Node, options?: { offset?: number; minimumVisible?: number }): void; - isNodeInView(element: Node, options?: { padding: number }): boolean; -} - -export const isGraph = (element: GraphElement): element is Graph => element && element.getKind() === ModelKind.graph; - -export const isNode = (element: GraphElement): element is Node => element && element.getKind() === ModelKind.node; - -export const isEdge = (element: GraphElement): element is Edge => element && element.getKind() === ModelKind.edge; - -export type EventListener = (...args: Args) => void; - -export interface State { - [key: string]: any; -} - -export interface WithState { - getState(): S; - setState(state: State): void; -} - -export type LayoutFactory = (type: string, graph: Graph) => Layout | undefined; - -export type ComponentFactory = (kind: ModelKind, type: string) => ComponentType<{ element: GraphElement }> | undefined; - -export type ElementFactory = (kind: ModelKind, type: string) => GraphElement | undefined; - -export interface Controller extends WithState { - getStore(): S; - fromModel(model: Model, merge?: boolean): void; - toModel(): Model; - hasGraph(): boolean; - getGraph(): Graph; - setGraph(graph: Graph): void; - getLayout(type: string | undefined): Layout | undefined; - setFitToScreenOnLayout(fitToScreen: boolean, padding?: number): void; - getElementById(id: string): GraphElement | undefined; - getNodeById(id: string): Node | undefined; - getEdgeById(id: string): Edge | undefined; - addElement(element: GraphElement): void; - removeElement(element: GraphElement): void; - getComponent(kind: ModelKind, type: string): ComponentType<{ element: GraphElement }>; - registerLayoutFactory(factory: LayoutFactory): void; - registerComponentFactory(factory: ComponentFactory): void; - registerElementFactory(factory: ElementFactory): void; - addEventListener(type: string, listener: L): Controller; - removeEventListener(type: string, listener: EventListener): Controller; - fireEvent(type: string, ...args: any): void; - getElements(): GraphElement[]; - setRenderConstraint(constrained: boolean, viewPadding?: ViewPaddingSettings): void; - shouldRenderNode(node: Node): boolean; -} - -export interface ElementEvent { - target: GraphElement; -} -export type ElementVisibilityChangeEvent = ElementEvent & { visible: boolean }; - -export type ElementChildEventListener = EventListener<[ElementEvent & { child: GraphElement }]>; -export type ElementVisibilityChangeEventListener = EventListener<[ElementVisibilityChangeEvent]>; - -export type NodeCollapseChangeEventListener = EventListener<[{ node: Node }]>; - -export type GraphLayoutEndEventListener = EventListener<[{ graph: Graph }]>; - -export const ADD_CHILD_EVENT = 'element-add-child'; -export const ELEMENT_VISIBILITY_CHANGE_EVENT = 'element-visibility-change'; -export const REMOVE_CHILD_EVENT = 'element-remove-child'; -export const NODE_COLLAPSE_CHANGE_EVENT = 'node-collapse-change'; -export const NODE_POSITIONED_EVENT = 'node-positioned'; -export const GRAPH_LAYOUT_END_EVENT = 'graph-layout-end'; -export const GRAPH_POSITION_CHANGE_EVENT = 'graph-position-change'; diff --git a/packages/react-topology/src/utils/ControllerContext.ts b/packages/react-topology/src/utils/ControllerContext.ts deleted file mode 100644 index 388efb9d992..00000000000 --- a/packages/react-topology/src/utils/ControllerContext.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createContext } from 'react'; -import { Controller } from '../types'; - -const ControllerContext = createContext(undefined as any); - -export default ControllerContext; diff --git a/packages/react-topology/src/utils/ElementContext.ts b/packages/react-topology/src/utils/ElementContext.ts deleted file mode 100644 index 081569f8af7..00000000000 --- a/packages/react-topology/src/utils/ElementContext.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createContext } from 'react'; -import { GraphElement } from '../types'; - -const ElementContext = createContext(undefined as any); - -export default ElementContext; diff --git a/packages/react-topology/src/utils/Stateful.ts b/packages/react-topology/src/utils/Stateful.ts deleted file mode 100644 index fd85c85a830..00000000000 --- a/packages/react-topology/src/utils/Stateful.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { action, observable } from 'mobx'; -import { WithState, State } from '../types'; - -export default class Stateful implements WithState { - @observable.shallow - private state: State = {}; - - getState(): S { - return this.state as S; - } - - @action - setState(state: State): void { - if (state) { - Object.assign(this.state, state); - } - } -} diff --git a/packages/react-topology/src/utils/__tests__/svg-utils.spec.ts b/packages/react-topology/src/utils/__tests__/svg-utils.spec.ts deleted file mode 100644 index 223ec375be1..00000000000 --- a/packages/react-topology/src/utils/__tests__/svg-utils.spec.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { createSvgIdUrl } from '../svg-utils'; - -export const mockLocation = (location?: { - hash?: string; - port?: number; - pathname?: string; - search?: string; - origin?: string; -}) => { - const windowLocation = JSON.stringify(window.location); - delete window.location; - Object.defineProperty(window, 'location', { - configurable: true, - writable: true, - value: JSON.parse(windowLocation), - }); - if (location) { - Object.assign(window.location, location); - } -}; - -describe('svg-utils#createSvgIdUrl', () => { - it('should return absolute url based on pathname and search', () => { - mockLocation({ - pathname: '/foo/bar', - search: '?key=value', - }); - expect(createSvgIdUrl('testid')).toBe('url(/foo/bar?key=value#testid)'); - }); -}); diff --git a/packages/react-topology/src/utils/anchor-utils.ts b/packages/react-topology/src/utils/anchor-utils.ts deleted file mode 100644 index 9c22fd7ee38..00000000000 --- a/packages/react-topology/src/utils/anchor-utils.ts +++ /dev/null @@ -1,179 +0,0 @@ -import Point from '../geom/Point'; - -const getEllipseAnchorPoint = (center: Point, width: number, height: number, reference: Point): Point => { - const { x, y } = reference; - if (width === 0 || height === 0 || (center.x === x && center.y === y)) { - return center; - } - - const dispX = (center.x - x) / (width / 2); - const dispY = (center.y - y) / (height / 2); - - const len = Math.sqrt(dispX * dispX + dispY * dispY); - - const newLength = len - 1; - - const lenProportion = newLength / len; - - return new Point((center.x - x) * lenProportion + x, (center.y - y) * lenProportion + y); -}; - -const getRectAnchorPoint = (center: Point, width: number, height: number, reference: Point): Point => { - let dx = reference.x - center.x; - let dy = reference.y - center.y; - - if ((dx === 0 && dy === 0) || (width === 0 && height === 0)) { - return center; - } - - const scale = 0.5 / Math.max(width === 0 ? 0 : Math.abs(dx) / width, height === 0 ? 0 : Math.abs(dy) / height); - - dx *= scale; - dy *= scale; - - return center.clone().translate(dx, dy); -}; - -const svgPointToPoint = (p: SVGPoint): Point => new Point(p.x, p.y); - -export const distanceToPoint = (p: Point, reference: Point): number => { - const dx = p.x - reference.x; - const dy = p.y - reference.y; - - return dx * dx + dy * dy; -}; - -const isBetween = (a: number, b1: number, b2: number): boolean => - Math.ceil(a) >= Math.min(b1, b2) && Math.floor(a) <= Math.max(b1, b2); - -export const getLinesIntersection = (line1: [Point, Point], line2: [Point, Point]): Point | null => { - const line1xDelta = line1[0].x - line1[1].x; - const line1yDelta = line1[0].y - line1[1].y; - const line2xDelta = line2[0].x - line2[1].x; - const line2yDelta = line2[0].y - line2[1].y; - - const denominator = line1xDelta * line2yDelta - line1yDelta * line2xDelta; - if (denominator === 0) { - // parallel lines do not intersect - return null; - } - - const d1 = line1[0].x * line1[1].y - line1[0].y * line1[1].x; - const d2 = line2[0].x * line2[1].y - line2[0].y * line2[1].x; - const xValue = d1 * line2xDelta - line1xDelta * d2; - const yValue = d1 * line2yDelta - d2 * line1yDelta; - const intersection: Point = new Point(xValue / denominator, yValue / denominator); - - if ( - !isBetween(intersection.x, line1[0].x, line1[1].x) || - !isBetween(intersection.y, line1[0].y, line1[1].y) || - !isBetween(intersection.x, line2[0].x, line2[1].x) || - !isBetween(intersection.y, line2[0].y, line2[1].y) - ) { - // intersection is not in range - return null; - } - - return intersection; -}; - -const getPathIntersectionPoint = (pathNode: SVGPathElement, line: [Point, Point]): Point => { - const pathLength = pathNode.getTotalLength(); - const numSegments = Math.min(Math.round(pathLength / 5), 100); - for (let i = 0; i < numSegments; i++) { - const pos1 = pathNode.getPointAtLength((pathLength * i) / numSegments); - const pos2 = pathNode.getPointAtLength((pathLength * (i + 1)) / numSegments); - const intersectPoint = getLinesIntersection([svgPointToPoint(pos1), svgPointToPoint(pos2)], line); - if (intersectPoint) { - return intersectPoint; - } - } - - // No intersection found, return the center point - const pathBox = pathNode.getBBox(); - return new Point(pathBox.x + pathBox.width / 2, pathBox.y + pathBox.height / 2); -}; - -const getPathClosestPoint = (pathNode: SVGPathElement, reference: Point) => { - const pathLength = pathNode.getTotalLength(); - let precision = 8; - let best: SVGPoint = pathNode.getPointAtLength(0); - let bestLength = 0; - let bestDistance = Infinity; - - // linear scan for coarse approximation - for (let scanLength = 0; scanLength <= pathLength; scanLength += precision) { - const scan: SVGPoint = pathNode.getPointAtLength(scanLength); - const scanDistance: number = distanceToPoint(svgPointToPoint(scan), reference); - if (scanDistance < bestDistance) { - best = scan; - bestLength = scanLength; - bestDistance = scanDistance; - } - } - - // binary search for precise estimate - precision /= 2; - while (precision > 0.5) { - const beforeLength: number = bestLength - precision; - - const before: SVGPoint = pathNode.getPointAtLength(beforeLength); - const beforeDistance: number = distanceToPoint(svgPointToPoint(before), reference); - - if (beforeLength >= 0 && beforeDistance < bestDistance) { - best = before; - bestLength = beforeLength; - bestDistance = beforeDistance; - } else { - const afterLength: number = bestLength + precision; - const after: SVGPoint = pathNode.getPointAtLength(afterLength); - const afterDistance: number = distanceToPoint(svgPointToPoint(after), reference); - - if (afterLength <= pathLength && afterDistance < bestDistance) { - best = after; - bestLength = afterLength; - bestDistance = afterDistance; - } else { - precision /= 2; - } - } - } - - return svgPointToPoint(best); -}; - -const getPathAnchorPoint = (pathNode: SVGPathElement, reference: Point, useClosestPathPoint: boolean = false) => { - if (useClosestPathPoint) { - return getPathClosestPoint(pathNode, reference); - } - - const pathBox = pathNode.getBBox(); - const pathCenter = new Point(pathBox.x + pathBox.width / 2, pathBox.y + pathBox.height / 2); - return getPathIntersectionPoint(pathNode, [reference, pathCenter]); -}; - -const getPolygonAnchorPoint = (polygonNode: SVGPolygonElement, reference: Point) => { - const polygonBox = polygonNode.getBBox(); - const polygonCenter = new Point(polygonBox.x + polygonBox.width / 2, polygonBox.y + polygonBox.height / 2); - const { points } = polygonNode; - let bestPoint: Point = polygonCenter; - let bestDistance = Infinity; - - for (let i = 0; i < points.length; i++) { - const intersectPoint: Point | null = getLinesIntersection( - [svgPointToPoint(points[i]), svgPointToPoint(points[i === points.length - 1 ? 0 : i + 1])], - [polygonCenter, reference] - ); - if (intersectPoint) { - const intersectDistance: number = distanceToPoint(intersectPoint, reference); - if (intersectDistance < bestDistance) { - bestPoint = intersectPoint; - bestDistance = intersectDistance; - } - } - } - - return bestPoint; -}; - -export { getEllipseAnchorPoint, getRectAnchorPoint, getPathAnchorPoint, getPolygonAnchorPoint }; diff --git a/packages/react-topology/src/utils/createAggregateEdges.ts b/packages/react-topology/src/utils/createAggregateEdges.ts deleted file mode 100644 index 35e7155c395..00000000000 --- a/packages/react-topology/src/utils/createAggregateEdges.ts +++ /dev/null @@ -1,94 +0,0 @@ -import * as lodash from 'lodash'; -import { EdgeModel, NodeModel } from '../types'; - -const getNodeParent = (nodeId: string, nodes: NodeModel[]): NodeModel | undefined => - nodes.find(n => (n.children ? n.children.includes(nodeId) : null)); - -const getDisplayedNodeForNode = (nodeId: string | undefined, nodes: NodeModel[] | undefined): string => { - if (!nodeId || !nodes) { - return ''; - } - - let displayedNode = nodes && nodes.find(n => n.id === nodeId); - let parent = displayedNode ? getNodeParent(displayedNode.id, nodes) : null; - while (parent) { - if (parent.collapsed) { - displayedNode = parent; - } - parent = getNodeParent(parent.id, nodes); - } - return displayedNode ? displayedNode.id : ''; -}; - -const createAggregateEdges = ( - aggregateEdgeType: string, - edges: EdgeModel[] | undefined, - nodes: NodeModel[] | undefined -): EdgeModel[] => { - const aggregateEdges: EdgeModel[] = []; - - return lodash.reduce( - edges, - (newEdges: EdgeModel[], edge: EdgeModel) => { - const source = getDisplayedNodeForNode(edge.source, nodes); - const target = getDisplayedNodeForNode(edge.target, nodes); - - // Make sure visible is defined so that changes override what could already be in the element - edge.visible = 'visible' in edge ? edge.visible : true; - - if (source !== edge.source || target !== edge.target) { - if (source !== target) { - const existing = aggregateEdges.find( - e => (e.source === source || e.source === target) && (e.target === target || e.target === source) - ); - - if (existing) { - // At least one other edge, add this edge and add the aggregate edge to the edges - - // Add this edge to the aggregate and set it not visible - existing.children && existing.children.push(edge.id); - edge.visible = false; - - // Hide edges that are depicted by this aggregate edge - lodash.forEach(existing.children, existingChild => { - const updateEdge = newEdges.find(newEdge => newEdge.id === existingChild); - if (updateEdge) { - updateEdge.visible = false; - } - }); - - // Update the aggregate edges bidirectional flag - existing.data.bidirectional = existing.data.bidirectional || existing.source !== edge.source; - - // Check if this edge has already been added - if ( - !newEdges.find( - e => (e.source === source || e.source === target) && (e.target === target || e.target === source) - ) - ) { - newEdges.push(existing); - } - } else { - const newEdge: EdgeModel = { - data: { bidirectional: false }, - children: [edge.id], - source, - target, - id: `aggregate_${source}_${target}`, - type: aggregateEdgeType - }; - aggregateEdges.push(newEdge); - } - } else { - // Hide edges that connect to a non-visible node to its ancestor - edge.visible = false; - } - } - newEdges.push(edge); - return newEdges; - }, - [] as EdgeModel[] - ); -}; - -export { createAggregateEdges }; diff --git a/packages/react-topology/src/utils/element-utils.ts b/packages/react-topology/src/utils/element-utils.ts deleted file mode 100644 index 6248d182c21..00000000000 --- a/packages/react-topology/src/utils/element-utils.ts +++ /dev/null @@ -1,122 +0,0 @@ -import * as _ from 'lodash'; -import { GraphElement, Node, isNode, isGraph, NodeStyle } from '../types'; - -const groupNodeElements = (nodes: GraphElement[]): Node[] => { - if (!_.size(nodes)) { - return []; - } - const groupNodes: Node[] = []; - _.forEach(nodes, nextNode => { - if (isNode(nextNode) && nextNode.isGroup() && !nextNode.isCollapsed()) { - groupNodes.push(nextNode); - groupNodes.push(...groupNodeElements(nextNode.getChildren())); - } - }); - return groupNodes; -}; - -const leafNodeElements = (nodeElements: Node | Node[] | null): Node[] => { - const nodes: Node[] = []; - - if (!nodeElements) { - return nodes; - } - - if (Array.isArray(nodeElements)) { - _.forEach(nodeElements, (nodeElement: Node) => { - nodes.push(...leafNodeElements(nodeElement)); - }); - return nodes; - } - - if (nodeElements.isGroup() && !nodeElements.isCollapsed()) { - const leafNodes: Node[] = []; - const children: GraphElement[] = nodeElements.getChildren(); - if (_.size(children)) { - _.forEach( - children.filter(e => isNode(e)), - element => { - leafNodes.push(...leafNodeElements(element as Node)); - } - ); - } - return leafNodes; - } - - return [nodeElements]; -}; - -const getTopCollapsedParent = (node: Node): Node => { - let returnNode: Node = node; - try { - let parent = !isGraph(node) && node.getParent(); - while (parent && !isGraph(parent)) { - if ((parent as Node).isCollapsed()) { - returnNode = parent as Node; - } - parent = parent.getParent(); - } - // eslint-disable-next-line no-empty - } catch (e) {} - return returnNode; -}; - -const getClosestVisibleParent = (node: Node): Node | null => { - if (!node) { - return null; - } - - let returnNode = null; - try { - let parent = node.getParent(); - while (parent) { - if (!parent.isVisible()) { - // parent isn't visible so no descendant could be visible - returnNode = null; - } else if ((parent as Node).isCollapsed() || !returnNode) { - // parent is collapsed, no descendant is visible, but parent is - returnNode = parent as Node; - } - parent = parent.getParent(); - } - // eslint-disable-next-line no-empty - } catch (e) {} - return returnNode; -}; - -const getElementPadding = (element: GraphElement): number => { - const stylePadding = element.getStyle().padding; - if (!stylePadding) { - return 0; - } - - if (Array.isArray(stylePadding)) { - // For a padding that is not consistent on all sides, use the max padding - return stylePadding.reduce((val, current) => Math.max(val, current), 0); - } - - return stylePadding as number; -}; - -const getGroupPadding = (element: GraphElement, padding = 0): number => { - if (isGraph(element)) { - return padding; - } - let newPadding = padding; - if (isNode(element) && element.isGroup() && !element.isCollapsed()) { - newPadding += getElementPadding(element); - } - if (element.getParent()) { - return getGroupPadding(element.getParent(), newPadding); - } - return newPadding; -}; - -export { - groupNodeElements, - leafNodeElements, - getTopCollapsedParent, - getClosestVisibleParent, - getElementPadding, - getGroupPadding -}; diff --git a/packages/react-topology/src/utils/geom-utils.ts b/packages/react-topology/src/utils/geom-utils.ts deleted file mode 100644 index a79ee581886..00000000000 --- a/packages/react-topology/src/utils/geom-utils.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Padding } from '../geom/types'; - -export const maxPadding = (padding?: Padding): number => { - if (typeof padding === 'number') { - return +padding; - } - if (Array.isArray(padding)) { - return padding.reduce((max, p) => Math.max(max, p), 0); - } - return 0; -}; diff --git a/packages/react-topology/src/utils/getNodeScaleTranslation.ts b/packages/react-topology/src/utils/getNodeScaleTranslation.ts deleted file mode 100644 index 507bead3fc0..00000000000 --- a/packages/react-topology/src/utils/getNodeScaleTranslation.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Node } from '../types'; - -export const getNodeScaleTranslation = ( - element: Node, - nodeScale: number, - scaleNode: boolean -): { translateX: number; translateY: number } => { - if (!scaleNode) { - return { translateX: 0, translateY: 0 }; - } - const bounds = element.getBounds(); - const translateX = bounds.width / 2 - (bounds.width / 2) * nodeScale; - const translateY = bounds.height / 2 - (bounds.height / 2) * nodeScale; - - return { translateX, translateY }; -}; diff --git a/packages/react-topology/src/utils/index.ts b/packages/react-topology/src/utils/index.ts deleted file mode 100644 index 674d598be87..00000000000 --- a/packages/react-topology/src/utils/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -export * from './anchor-utils'; -export { default as ControllerContext } from './ControllerContext'; -export { default as ElementContext } from './ElementContext'; -export * from './element-utils'; -export * from './geom-utils'; -export * from './svg-utils'; -export * from './style-utils'; -export * from './getNodeScaleTranslation'; -export { default as useCallbackRef } from './useCallbackRef'; -export { default as useCombineRefs } from './useCombineRefs'; -export { default as useHover } from './useHover'; -export * from './useSize'; -export * from './createAggregateEdges'; diff --git a/packages/react-topology/src/utils/style-utils.ts b/packages/react-topology/src/utils/style-utils.ts deleted file mode 100644 index 8b06103ca27..00000000000 --- a/packages/react-topology/src/utils/style-utils.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { EdgeAnimationSpeed, EdgeStyle, NodeStatus } from '../types'; -import styles from '@patternfly/react-styles/css/components/Topology/topology-components'; - -export const StatusModifier = { - [NodeStatus.default]: '', - [NodeStatus.info]: styles.modifiers.info, - [NodeStatus.success]: styles.modifiers.success, - [NodeStatus.warning]: styles.modifiers.warning, - [NodeStatus.danger]: styles.modifiers.danger -}; - -export const getEdgeStyleClassModifier = (edgeType: EdgeStyle): string => { - switch (edgeType) { - case EdgeStyle.solid: - return 'pf-m-solid'; - case EdgeStyle.dotted: - return 'pf-m-dotted'; - case EdgeStyle.dashed: - return 'pf-m-dashed'; - case EdgeStyle.dashedMd: - return 'pf-m-dashed-md'; - case EdgeStyle.dashedLg: - return 'pf-m-dashed-lg'; - case EdgeStyle.dashedXl: - return 'pf-m-dashed-xl'; - default: - return ''; - } -}; - -export const getEdgeAnimationDuration = (speed: EdgeAnimationSpeed): number => { - switch (speed) { - case EdgeAnimationSpeed.slow: - return 1.25; - case EdgeAnimationSpeed.mediumSlow: - return 1; - case EdgeAnimationSpeed.medium: - return 0.75; - case EdgeAnimationSpeed.mediumFast: - return 0.5; - case EdgeAnimationSpeed.fast: - return 0.25; - default: - return 0; - } -}; diff --git a/packages/react-topology/src/utils/svg-utils.ts b/packages/react-topology/src/utils/svg-utils.ts deleted file mode 100644 index 59026823e61..00000000000 --- a/packages/react-topology/src/utils/svg-utils.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { PointTuple } from '../types'; - -/** - * @param id - */ -export function createSvgIdUrl(id: string): string { - return `url(${`${window.location.pathname}${window.location.search}`}#${id})`; -} - -export type HullPaddingGetter = (point: PointTuple) => number; - -// Returns the vector 'v' scaled by 'scale'. -/** - * @param scale - * @param v - */ -export function vecScale(scale: number, v: PointTuple): PointTuple { - return [scale * v[0], scale * v[1]]; -} - -// Returns the sum of two vectors, or a combination of a point and a vector. -/** - * @param pv1 - * @param pv2 - */ -export function vecSum(pv1: PointTuple, pv2: PointTuple): PointTuple { - return [pv1[0] + pv2[0], pv1[1] + pv2[1]]; -} - -// Returns the unit normal to the line segment from p0 to p1. -/** - * @param p0 - * @param p1 - */ -export function unitNormal(p0: PointTuple, p1: PointTuple): PointTuple { - const n = [p0[1] - p1[1], p1[0] - p0[0]]; - const nLength = Math.sqrt(n[0] * n[0] + n[1] * n[1]); - return nLength > 0 ? [n[0] / nLength, n[1] / nLength] : [0, 0]; -} - -// Returns the path for a rounded hull around a single point (a circle). -/** - * @param polyPoints - * @param hp - */ -function roundedHull1(polyPoints: PointTuple[], hp: HullPaddingGetter): string { - const padding = hp(polyPoints[0]); - const p1 = [polyPoints[0][0], polyPoints[0][1] - padding]; - const p2 = [polyPoints[0][0], polyPoints[0][1] + padding]; - - return `M ${p1} A ${padding},${padding},0,0,0,${p2} A ${padding},${padding},0,0,0,${p1}`; -} - -// Returns the path for a rounded hull around two points (a "capsule" shape). -/** - * @param startPoint - * @param endPoint - * @param padding - */ -export function boundingBoxForLine( - startPoint: PointTuple, - endPoint: PointTuple, - padding: number | HullPaddingGetter = 0 -): [PointTuple, PointTuple, PointTuple, PointTuple] { - const hp = typeof padding === 'number' ? () => padding : padding; - const offsetVector1 = vecScale(hp(startPoint), unitNormal(startPoint, endPoint)); - const invOffsetVector1 = vecScale(-1, offsetVector1); - - const offsetVector2 = vecScale(hp(endPoint), unitNormal(startPoint, endPoint)); - const invOffsetVector2 = vecScale(-1, offsetVector2); - - const p0 = vecSum(startPoint, offsetVector1); - const p1 = vecSum(endPoint, offsetVector2); - const p2 = vecSum(endPoint, invOffsetVector2); - const p3 = vecSum(startPoint, invOffsetVector1); - - return [p0, p1, p2, p3]; -} - -// Returns the path for a rounded hull around two points (a "capsule" shape). -/** - * @param polyPoints - * @param hp - */ -function roundedHull2(polyPoints: PointTuple[], hp: HullPaddingGetter): string { - const points = boundingBoxForLine(polyPoints[0], polyPoints[1], hp); - - return `M ${points[0]} L ${points[1]} A ${hp(polyPoints[1])},${hp(polyPoints[1])},0,0,0,${points[2]} ${' '} - L ${points[3]} A ${hp(polyPoints[0])},${hp(polyPoints[0])},0,0,0,${points[0]}`; -} - -export const pointTuplesToPath = (segments: PointTuple[]): string => { - const pathSegments = segments.map( - (segment, index) => `${index === 0 ? 'M' : 'L'} ${segments[index][0]} ${segments[index][1]}` - ); - pathSegments.push(`L ${segments[0][0]} ${segments[0][1]}`); - return pathSegments.join(' '); -}; - -// Returns the SVG path data string representing the polygon, expanded and rounded. -/** - * @param polyPoints - * @param hullPadding - */ -export function hullPath(polyPoints: PointTuple[], hullPadding: number | HullPaddingGetter = 0): string { - const hp = typeof hullPadding === 'number' ? () => hullPadding : hullPadding; - - // Handle special cases - if (!polyPoints || polyPoints.length < 1) { - return ''; - } - if (polyPoints.length === 1) { - return roundedHull1(polyPoints, hp); - } - if (polyPoints.length === 2) { - return roundedHull2(polyPoints, hp); - } - - const segments: PointTuple[][] = new Array(polyPoints.length); - - // Calculate each offset (outwards) segment of the convex hull. - for (let segmentIndex = 0; segmentIndex < segments.length; ++segmentIndex) { - const p0 = segmentIndex === 0 ? polyPoints[polyPoints.length - 1] : polyPoints[segmentIndex - 1]; - const p1 = polyPoints[segmentIndex]; - - // Compute the offset vector for the line segment, with length = hullPadding. - // const offset = vecScale(hullPadding, unitNormal(p0, p1)); - segments[segmentIndex] = [ - vecSum(p0, vecScale(hp(p0), unitNormal(p0, p1))), - vecSum(p1, vecScale(hp(p1), unitNormal(p0, p1))) - ]; - } - - return segments - .map((segment, index) => { - const p0 = index === 0 ? polyPoints[polyPoints.length - 1] : polyPoints[index - 1]; - return `${index === 0 ? `M ${segments[segments.length - 1][1]} ` : ''}A ${hp(p0)},${hp(p0)},0,0,0,${ - segment[0] - } L ${segment[1]}`; - }) - .join(' '); -} diff --git a/packages/react-topology/src/utils/truncate-middle.ts b/packages/react-topology/src/utils/truncate-middle.ts deleted file mode 100644 index c6dd33addb5..00000000000 --- a/packages/react-topology/src/utils/truncate-middle.ts +++ /dev/null @@ -1,49 +0,0 @@ -export interface TruncateOptions { - length?: number; // Length to truncate text to - truncateEnd?: boolean; // Flag to alternatively truncate at the end - omission?: string; // Truncation text used to denote the truncation (ellipsis) - minTruncateChars?: number; // Minimum number of characters to truncate -} - -const DEFAULT_OPTIONS: TruncateOptions = { - length: 20, - truncateEnd: false, - omission: '\u2026', // ellipsis character - minTruncateChars: 3 -}; - -// Truncates a string down to `maxLength` characters when the length -// is greater than the `maxLength` + `minTruncateChars` values. -// By default the middle is truncated, set the options.truncateEnd to true to truncate at the end. -// Truncated text is replaced with the provided omission option (ellipsis character by default); -export const truncateMiddle = (text: string, options: TruncateOptions = {}): string => { - const { length, truncateEnd, omission, minTruncateChars } = { ...DEFAULT_OPTIONS, ...options }; - if (!text) { - return text; - } - - // Do not truncate less than the minimum truncate characters - if (text.length <= length + minTruncateChars) { - return text; - } - - if (length <= omission.length) { - return omission; - } - - if (truncateEnd) { - return `${text.substr(0, length - 1)}${omission}`; - } - - const startLength = Math.ceil((length - omission.length) / 2); - const endLength = length - startLength - omission.length; - const startFragment = text.substr(0, startLength); - const endFragment = text.substr(text.length - endLength); - return `${startFragment}${omission}${endFragment}`; -}; - -export const shouldTruncate = (text: string, options: TruncateOptions = {}): boolean => { - const { length, minTruncateChars } = { ...DEFAULT_OPTIONS, ...options }; - - return text.length > length + minTruncateChars; -}; diff --git a/packages/react-topology/src/utils/useCallbackRef.ts b/packages/react-topology/src/utils/useCallbackRef.ts deleted file mode 100644 index 99b7f898cdc..00000000000 --- a/packages/react-topology/src/utils/useCallbackRef.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { useRef, useCallback } from 'react'; - -/** - * @param rawCallback - */ -export default function useCallbackRef any>(rawCallback: T) { - const cleanupRef = useRef<(() => any) | null>(null); - const callback = useCallback( - (node => { - if (cleanupRef.current) { - cleanupRef.current(); - cleanupRef.current = null; - } - if (node) { - cleanupRef.current = rawCallback(node); - } - }) as T, - [rawCallback] - ); - - return callback; -} diff --git a/packages/react-topology/src/utils/useCombineRefs.tsx b/packages/react-topology/src/utils/useCombineRefs.tsx deleted file mode 100644 index aa283cea280..00000000000 --- a/packages/react-topology/src/utils/useCombineRefs.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import * as React from 'react'; - -const useCombineRefs = (...refs: (React.Ref | undefined)[]) => - React.useCallback( - (element: RefType | null): void => - refs.forEach(ref => { - if (ref) { - if (typeof ref === 'function') { - ref(element); - } else { - (ref as React.MutableRefObject).current = element; - } - } - }), - // eslint-disable-next-line react-hooks/exhaustive-deps - refs - ); -export default useCombineRefs; diff --git a/packages/react-topology/src/utils/useHover.ts b/packages/react-topology/src/utils/useHover.ts deleted file mode 100644 index 315485dd478..00000000000 --- a/packages/react-topology/src/utils/useHover.ts +++ /dev/null @@ -1,80 +0,0 @@ -import * as React from 'react'; -import useCallbackRef from './useCallbackRef'; - -const useHover = ( - delayIn: number = 200, - delayOut: number = 200 -): [boolean, (node: T) => (() => void) | undefined] => { - const [hover, setHover] = React.useState(false); - const mountRef = React.useRef(true); - - // need to ensure we do not start the unset timer on unmount - React.useEffect( - () => () => { - mountRef.current = false; - }, - [] - ); - - // The unset handle needs to be referred by listeners in different closures. - const unsetHandle = React.useRef(); - - const callbackRef = useCallbackRef( - React.useCallback( - (node: T) => { - if (node) { - // store locally instead of a ref because it only needs to be referred by inner closures - let delayHandle: any; - - const delayedStateChange = (newState: boolean, delay: number) => { - clearTimeout(unsetHandle.current); - clearTimeout(delayHandle); - - if (delay != null) { - delayHandle = window.setTimeout(() => { - clearTimeout(unsetHandle.current); - setHover(newState); - }, delay); - } else { - setHover(newState); - } - }; - - const onMouseEnter = () => { - delayedStateChange(true, delayIn); - }; - - const onMouseLeave = () => { - delayedStateChange(false, delayOut); - }; - - node.addEventListener('mouseenter', onMouseEnter); - node.addEventListener('mouseleave', onMouseLeave); - - return () => { - node.removeEventListener('mouseenter', onMouseEnter); - node.removeEventListener('mouseleave', onMouseLeave); - clearTimeout(delayHandle); - if (mountRef.current) { - // Queue the unset in case reattaching to a new node in the same location. - // This can happen with layers. Rendering a node to a new layer will unmount the old node - // and remount a new node at the same location. This will prevent flickering and getting - // stuck in a hover state. - unsetHandle.current = window.setTimeout(() => { - if (mountRef.current) { - setHover(false); - } - }, Math.max(delayIn, delayOut)); - } - }; - } - return undefined; - }, - [delayIn, delayOut] - ) - ); - - return [hover, callbackRef]; -}; - -export default useHover; diff --git a/packages/react-topology/src/utils/useSize.ts b/packages/react-topology/src/utils/useSize.ts deleted file mode 100644 index d92eed330cc..00000000000 --- a/packages/react-topology/src/utils/useSize.ts +++ /dev/null @@ -1,26 +0,0 @@ -import * as React from 'react'; - -interface Size { - width: number; - height: number; -} - -const EMPTY: any[] = []; - -export const useSize = (dependencies: any[] = EMPTY): [Size | undefined, (node: SVGGraphicsElement) => void] => { - const [size, setSize] = React.useState(); - const sizeRef = React.useRef(); - sizeRef.current = size; - - const callbackRef = React.useCallback((node: SVGGraphicsElement): void => { - if (node != null) { - const bb = node.getBBox(); - if (!sizeRef.current || sizeRef.current.width !== bb.width || sizeRef.current.height !== bb.height) { - setSize({ width: bb.width, height: bb.height }); - } - } - // dynamic dependencies - // eslint-disable-next-line react-hooks/exhaustive-deps - }, dependencies); - return [size, callbackRef]; -}; diff --git a/packages/react-topology/tsconfig.cjs.json b/packages/react-topology/tsconfig.cjs.json deleted file mode 100644 index 578d46af9d3..00000000000 --- a/packages/react-topology/tsconfig.cjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./dist/js", - "module": "commonjs", - "tsBuildInfoFile": "dist/cjs.tsbuildinfo" - } -} diff --git a/packages/react-topology/tsconfig.json b/packages/react-topology/tsconfig.json deleted file mode 100644 index 2b936822461..00000000000 --- a/packages/react-topology/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "../tsconfig.base.json", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./dist/esm", - "tsBuildInfoFile": "dist/esm.tsbuildinfo", - "experimentalDecorators": true, - "suppressImplicitAnyIndexErrors": true, - "noImplicitReturns": true, - }, - "include": [ - "./src/*", - "./src/**/*" - ], - "references": [ - { - "path": "../react-core" - } - ] -} diff --git a/yarn.lock b/yarn.lock index b6fd1150bed..5483b0402cf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3638,6 +3638,41 @@ "@patternfly/react-styles" "^4.92.3" "@patternfly/react-table" "^4.112.6" +"@patternfly/react-log-viewer@^4.87.77": + version "4.87.77" + resolved "https://registry.yarnpkg.com/@patternfly/react-log-viewer/-/react-log-viewer-4.87.77.tgz#5fe685f31b5434a1e78ab867d574327ae63bd9a7" + integrity sha512-nYZDktXGpUrzOSWC9qh1RlAa9DKbEwwIy9Vgu2wTDw5SXl9SLX9AP6k+5A1Kdblq6KnKhRB4QUFavYbIbc14jA== + dependencies: + "@patternfly/react-core" "^4.267.6" + "@patternfly/react-icons" "^4.93.3" + "@patternfly/react-styles" "^4.92.3" + memoize-one "^5.1.0" + resize-observer-polyfill "^1.5.1" + +"@patternfly/react-topology@^4.90.38": + version "4.90.38" + resolved "https://registry.yarnpkg.com/@patternfly/react-topology/-/react-topology-4.90.38.tgz#abd379b01c2cf7ce7c86c6ef752f3b34580419c7" + integrity sha512-O8zs8sjGlaKL8E5FW5oM4/stHwJ5yKVQGsM6ILoToFj9t/gnrGRBT7lkYftO5EBlch4aWRZhca5WRTVrseh/ng== + dependencies: + "@patternfly/react-core" "^4.267.6" + "@patternfly/react-icons" "^4.93.3" + "@patternfly/react-styles" "^4.92.3" + "@types/d3" "^5.7.2" + "@types/d3-force" "^1.2.1" + "@types/dagre" "0.7.42" + "@types/react-measure" "^2.0.6" + "@types/webcola" "3.2.0" + d3 "^5.16.0" + dagre "0.8.2" + lodash "^4.17.19" + mobx "^5.15.4" + mobx-react "^6.2.0" + point-in-svg-path "^1.0.1" + popper.js "^1.16.1" + react-measure "^2.3.0" + tslib "^2.0.0" + webcola "3.4.0" + "@patternfly/react-virtualized-extension@^4.88.82": version "4.88.82" resolved "https://registry.yarnpkg.com/@patternfly/react-virtualized-extension/-/react-virtualized-extension-4.88.82.tgz#59e0e731d502f3f3c4aa497cad65c8a422da2558"