|
|
|
@ -499,7 +499,7 @@ func (h *S3TablesHandler) handleListTables(w http.ResponseWriter, r *http.Reques |
|
|
|
if err == nil { |
|
|
|
namespacePolicy = string(policyData) |
|
|
|
} else if !errors.Is(err, ErrAttributeNotFound) { |
|
|
|
return fmt.Errorf("failed to fetch namespace policy: %v", err) |
|
|
|
return fmt.Errorf("failed to fetch namespace policy: %w", err) |
|
|
|
} |
|
|
|
|
|
|
|
// Fetch bucket metadata and policy
|
|
|
|
@ -509,17 +509,17 @@ func (h *S3TablesHandler) handleListTables(w http.ResponseWriter, r *http.Reques |
|
|
|
return fmt.Errorf("failed to unmarshal bucket metadata: %w", err) |
|
|
|
} |
|
|
|
} else if !errors.Is(err, ErrAttributeNotFound) { |
|
|
|
return fmt.Errorf("failed to fetch bucket metadata: %v", err) |
|
|
|
return fmt.Errorf("failed to fetch bucket metadata: %w", err) |
|
|
|
} |
|
|
|
|
|
|
|
policyData, err = h.getExtendedAttribute(r.Context(), client, bucketPath, ExtendedKeyPolicy) |
|
|
|
if err == nil { |
|
|
|
bucketPolicy = string(policyData) |
|
|
|
} else if !errors.Is(err, ErrAttributeNotFound) { |
|
|
|
return fmt.Errorf("failed to fetch bucket policy: %v", err) |
|
|
|
return fmt.Errorf("failed to fetch bucket policy: %w", err) |
|
|
|
} |
|
|
|
if tags, err := h.readTags(r.Context(), client, bucketPath); err != nil { |
|
|
|
return err |
|
|
|
return fmt.Errorf("failed to read bucket tags: %w", err) |
|
|
|
} else if tags != nil { |
|
|
|
bucketTags = tags |
|
|
|
} |
|
|
|
@ -545,6 +545,9 @@ func (h *S3TablesHandler) handleListTables(w http.ResponseWriter, r *http.Reques |
|
|
|
} |
|
|
|
|
|
|
|
tables, paginationToken, err = h.listTablesInNamespaceWithClient(r, client, bucketName, namespaceName, req.Prefix, req.ContinuationToken, maxTables) |
|
|
|
if err != nil { |
|
|
|
return fmt.Errorf("list tables in namespace %v: %w", namespaceName, err) |
|
|
|
} |
|
|
|
} else { |
|
|
|
// List tables across all namespaces in bucket
|
|
|
|
bucketPath := GetTableBucketPath(bucketName) |
|
|
|
@ -555,10 +558,10 @@ func (h *S3TablesHandler) handleListTables(w http.ResponseWriter, r *http.Reques |
|
|
|
// Fetch bucket metadata and policy
|
|
|
|
data, err := h.getExtendedAttribute(r.Context(), client, bucketPath, ExtendedKeyMetadata) |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
return fmt.Errorf("failed to fetch bucket metadata: %w", err) |
|
|
|
} |
|
|
|
if err := json.Unmarshal(data, &bucketMeta); err != nil { |
|
|
|
return err |
|
|
|
return fmt.Errorf("failed to unmarshal bucket metadata: %w", err) |
|
|
|
} |
|
|
|
|
|
|
|
// Fetch bucket policy if it exists
|
|
|
|
@ -566,10 +569,10 @@ func (h *S3TablesHandler) handleListTables(w http.ResponseWriter, r *http.Reques |
|
|
|
if err == nil { |
|
|
|
bucketPolicy = string(policyData) |
|
|
|
} else if !errors.Is(err, ErrAttributeNotFound) { |
|
|
|
return fmt.Errorf("failed to fetch bucket policy: %v", err) |
|
|
|
return fmt.Errorf("failed to fetch bucket policy: %w", err) |
|
|
|
} |
|
|
|
if tags, err := h.readTags(r.Context(), client, bucketPath); err != nil { |
|
|
|
return err |
|
|
|
return fmt.Errorf("failed to read bucket tags: %w", err) |
|
|
|
} else if tags != nil { |
|
|
|
bucketTags = tags |
|
|
|
} |
|
|
|
@ -586,6 +589,9 @@ func (h *S3TablesHandler) handleListTables(w http.ResponseWriter, r *http.Reques |
|
|
|
} |
|
|
|
|
|
|
|
tables, paginationToken, err = h.listTablesInAllNamespaces(r, client, bucketName, req.Prefix, req.ContinuationToken, maxTables) |
|
|
|
if err != nil { |
|
|
|
return fmt.Errorf("list tables in all namespaces: %w", err) |
|
|
|
} |
|
|
|
} |
|
|
|
return err |
|
|
|
}) |
|
|
|
@ -768,8 +774,7 @@ func (h *S3TablesHandler) listTablesInAllNamespaces(r *http.Request, client file |
|
|
|
|
|
|
|
nsTables, nsToken, err := h.listTablesInNamespaceWithClient(r, client, bucketName, namespace, prefix, tableNameFilter, maxTables-len(tables)) |
|
|
|
if err != nil { |
|
|
|
glog.Warningf("S3Tables: failed to list tables in namespace %s/%s: %v", bucketName, namespace, err) |
|
|
|
continue |
|
|
|
return nil, "", fmt.Errorf("list tables in namespace %s: %w", namespace, err) |
|
|
|
} |
|
|
|
|
|
|
|
tables = append(tables, nsTables...) |
|
|
|
|