Browse Source

feat: support Zilliz Cloud serverless (#743)

Signed-off-by: ryjiang <jiangruiyi@gmail.com>
ryjiang 5 months ago
parent
commit
535f5663c3

+ 6 - 1
client/src/context/Auth.tsx

@@ -22,6 +22,7 @@ export const authContext = createContext<AuthContextType>({
   },
   setAuthReq: () => {},
   isManaged: false,
+  isServerless: false,
   isAuth: false,
   login: async () => {
     return { clientId: '', database: '' };
@@ -91,6 +92,9 @@ export const AuthProvider = (props: { children: React.ReactNode }) => {
     window.localStorage.removeItem(MILVUS_CLIENT_ID);
   };
 
+  const isManaged = authReq.address.includes('zilliz');
+  const isServerless = isManaged && authReq.address.includes('serverless');
+
   return (
     <Provider
       value={{
@@ -100,7 +104,8 @@ export const AuthProvider = (props: { children: React.ReactNode }) => {
         logout,
         clientId,
         isAuth: !!clientId,
-        isManaged: authReq.address.includes('zilliz'),
+        isManaged: isManaged,
+        isServerless:isServerless,
       }}
     >
       {props.children}

+ 3 - 3
client/src/context/System.tsx

@@ -11,7 +11,7 @@ export const systemContext = createContext<SystemContextType>({
 
 const { Provider } = systemContext;
 export const SystemProvider = (props: { children: React.ReactNode }) => {
-  const { isAuth } = useContext(authContext);
+  const { isAuth, isServerless } = useContext(authContext);
 
   const [data, setData] = useState<any>({});
 
@@ -20,8 +20,8 @@ export const SystemProvider = (props: { children: React.ReactNode }) => {
       // fetch all data
       const [metrics, users, roles] = await Promise.all([
         MilvusService.getMetrics(),
-        UserService.getUsers(),
-        UserService.getRoles(),
+        !isServerless ? UserService.getUsers() : { usernames: [] },
+        !isServerless ? UserService.getRoles() : { results: [] },
       ]);
 
       // parse data

+ 1 - 0
client/src/context/Types.ts

@@ -73,6 +73,7 @@ export type AuthContextType = {
   setAuthReq: Dispatch<SetStateAction<AuthReq>>;
   clientId: string;
   isManaged: boolean;
+  isServerless: boolean;
   isAuth: boolean;
   logout: (pass?: boolean) => void;
   login: (params: AuthReq) => Promise<AuthObject>;

+ 8 - 3
client/src/pages/databases/Databases.tsx

@@ -321,6 +321,8 @@ const DatabasesTab = (props: {
   databaseName: string;
   tabClass: string; // tab class
 }) => {
+  // context
+  const { isManaged } = useContext(authContext);
   const { databaseName, tabClass, databasePage } = props;
   const { t: collectionTrans } = useTranslation('collection');
 
@@ -330,12 +332,15 @@ const DatabasesTab = (props: {
       component: <Collections />,
       path: `collections`,
     },
-    {
+  ];
+
+  if (!isManaged) {
+    dbTab.push({
       label: collectionTrans('properties'),
       component: <Properties type="database" target={databaseName} />,
       path: `properties`,
-    },
-  ];
+    });
+  }
 
   const actionDbTab = dbTab.findIndex(t => t.path === databasePage);
 

+ 7 - 2
client/src/pages/home/DatabaseCard.tsx

@@ -101,7 +101,7 @@ const DatabaseCard: FC<DatabaseCardProps> = ({
   isActive = false,
 }) => {
   // context
-  const { isManaged } = useContext(authContext);
+  const { isManaged, isServerless } = useContext(authContext);
   const { setDialog, openSnackBar, handleCloseDialog } =
     useContext(rootContext);
 
@@ -150,6 +150,11 @@ const DatabaseCard: FC<DatabaseCardProps> = ({
       <section
         className={`${wrapperClass} ${classes.wrapper} ${classes.create}`}
         onClick={() => {
+          if (isManaged) {
+            // go to https://cloud.zilliz.com/orgs/
+            window.open('https://cloud.zilliz.com/', '_blank');
+            return;
+          }
           setDialog({
             open: true,
             type: 'custom',
@@ -201,7 +206,7 @@ const DatabaseCard: FC<DatabaseCardProps> = ({
               </>
             )}
           </div>
-          {database.name !== 'default' && (
+          {database.name !== 'default' && !isServerless && (
             <CustomButton
               className={classes.delIcon}
               tooltip={`${btnTrans('drop')} ${dbTrans('database')}`}

+ 0 - 2
server/src/milvus/milvus.service.ts

@@ -159,8 +159,6 @@ export class MilvusService {
     if (clientCache.has(clientId)) {
       const { milvusClient } = clientCache.get(clientId);
 
-      console.info('Deleting client', clientId);
-
       const res = await milvusClient.closeConnection();
 
       // clear crons