Repository: fluid-cloudnative/fluid
Pull request #4044 (2024-05-06 15:27:26)

this pr is to fix a wrong time of Copyright
<!-- 
Please make sure you have read and understood the contributing guidelines;
https://github.com/fluid-cloudnative/fluid/blob/master/CONTRIBUTING.md-->

### Ⅰ. Describe what this PR does
this pr is to fix a wrong time of Copyright from 2023 to 2020 in the file"pkg/ddc/alluxio/types.go",so the Task 166 is finished.

### Ⅱ. Does this pull request fix one issue?
<!--If so, add "fixes #xxxx" so that the issue will be closed when this PR is merged (for example, "fixes #15" to close Issue #15). Otherwise, add "NONE" -->
fixes #XXXX

### Ⅲ. List the added test cases (unit test/integration test) if any, please explain if no tests are needed.


### Ⅳ. Describe how to verify it


### Ⅴ. Special notes for reviews

fluid-e2e-bot[bot]: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by:
**Once this PR has been reviewed and has the lgtm label**, please assign cheyang for approval by writing `/assign @cheyang` in a comment. For more information see:[The Kubernetes Code Review Process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process).

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=fluid-cloudnative%2Ffluid).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/fluid-cloudnative/fluid/blob/master/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["cheyang"]} -->
fluid-e2e-bot[bot]: Hi @VictorChen77. Thanks for your PR.

I'm waiting for a [fluid-cloudnative](https://github.com/orgs/fluid-cloudnative/people) member to verify that this patch is reasonable to test. If it is, they should reply with `/ok-to-test` on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should [join the org](https://github.com/orgs/fluid-cloudnative/people) to skip this step.

Once the patch is verified, the new status will be reflected by the `ok-to-test` label.

I understand the commands that are listed [here](https://go.k8s.io/bot-commands?repo=fluid-cloudnative%2Ffluid).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>

sonarcloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=fluid-cloudnative_fluid&pullRequest=4044) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=fluid-cloudnative_fluid&pullRequest=4044&resolved=false&inNewCodePeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/component_measures?id=fluid-cloudnative_fluid&pullRequest=4044&metric=new_accepted_issues&view=list)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=fluid-cloudnative_fluid&pullRequest=4044&resolved=false&inNewCodePeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/no-data-16px.png '') No data about Coverage  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/no-data-16px.png '') No data about Duplication  
  
[See analysis details on SonarCloud](https://sonarcloud.io/dashboard?id=fluid-cloudnative_fluid&pullRequest=4044)


LiYuhang9527: please add "-s" when you use commande "git commit"
sonarcloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=fluid-cloudnative_fluid&pullRequest=4044) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=fluid-cloudnative_fluid&pullRequest=4044&resolved=false&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=fluid-cloudnative_fluid&pullRequest=4044&resolutions=WONTFIX)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=fluid-cloudnative_fluid&pullRequest=4044&resolved=false&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/no-data-16px.png '') No data about Coverage  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/no-data-16px.png '') No data about Duplication  
  
[See analysis details on SonarCloud](https://sonarcloud.io/dashboard?id=fluid-cloudnative_fluid&pullRequest=4044)



Patch:
diff --git a/api/v1alpha1/openapi_generated.go b/api/v1alpha1/openapi_generated.go
index b45c5488..9819695e 100644
--- a/api/v1alpha1/openapi_generated.go
+++ b/api/v1alpha1/openapi_generated.go
@@ -120,11 +120,11 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
 		"github.com/fluid-cloudnative/fluid/api/v1alpha1.TieredStore":                schema_fluid_cloudnative_fluid_api_v1alpha1_TieredStore(ref),
 		"github.com/fluid-cloudnative/fluid/api/v1alpha1.User":                       schema_fluid_cloudnative_fluid_api_v1alpha1_User(ref),
 		"github.com/fluid-cloudnative/fluid/api/v1alpha1.VersionSpec":                schema_fluid_cloudnative_fluid_api_v1alpha1_VersionSpec(ref),
+		"github.com/fluid-cloudnative/fluid/api/v1alpha1.VineyardClientSocketSpec":   schema_fluid_cloudnative_fluid_api_v1alpha1_VineyardClientSocketSpec(ref),
 		"github.com/fluid-cloudnative/fluid/api/v1alpha1.VineyardCompTemplateSpec":   schema_fluid_cloudnative_fluid_api_v1alpha1_VineyardCompTemplateSpec(ref),
 		"github.com/fluid-cloudnative/fluid/api/v1alpha1.VineyardRuntime":            schema_fluid_cloudnative_fluid_api_v1alpha1_VineyardRuntime(ref),
 		"github.com/fluid-cloudnative/fluid/api/v1alpha1.VineyardRuntimeList":        schema_fluid_cloudnative_fluid_api_v1alpha1_VineyardRuntimeList(ref),
 		"github.com/fluid-cloudnative/fluid/api/v1alpha1.VineyardRuntimeSpec":        schema_fluid_cloudnative_fluid_api_v1alpha1_VineyardRuntimeSpec(ref),
-		"github.com/fluid-cloudnative/fluid/api/v1alpha1.VineyardSockSpec":           schema_fluid_cloudnative_fluid_api_v1alpha1_VineyardSockSpec(ref),
 		"github.com/fluid-cloudnative/fluid/api/v1alpha1.VolumeSource":               schema_fluid_cloudnative_fluid_api_v1alpha1_VolumeSource(ref),
 		"github.com/fluid-cloudnative/fluid/api/v1alpha1.WaitingStatus":              schema_fluid_cloudnative_fluid_api_v1alpha1_WaitingStatus(ref),
 	}
@@ -6497,6 +6497,102 @@ func schema_fluid_cloudnative_fluid_api_v1alpha1_VersionSpec(ref common.Referenc
 	}
 }
 
+func schema_fluid_cloudnative_fluid_api_v1alpha1_VineyardClientSocketSpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "VineyardClientSocketSpec holds the configurations for vineyard client socket",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"image": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Image for Vineyard Fuse Default is `vineyardcloudnative/vineyard-fluid-fuse`",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"imageTag": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Image Tag for Vineyard Fuse Default is `v0.21.5`",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"imagePullPolicy": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Image pull policy for Vineyard Fuse Default is `IfNotPresent` Available values are `Always`, `IfNotPresent`, `Never`",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"env": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Environment variables that will be used by Vineyard Fuse. Default is not set.",
+							Type:        []string{"object"},
+							AdditionalProperties: &spec.SchemaOrBool{
+								Allows: true,
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: "",
+										Type:    []string{"string"},
+										Format:  "",
+									},
+								},
+							},
+						},
+					},
+					"cleanPolicy": {
+						SchemaProps: spec.SchemaProps{
+							Description: "CleanPolicy decides when to clean Vineyard Fuse pods. Currently Fluid supports two policies: OnDemand and OnRuntimeDeleted OnDemand cleans fuse pod once th fuse pod on some node is not needed OnRuntimeDeleted cleans fuse pod only when the cache runtime is deleted Defaults to OnRuntimeDeleted",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"resources": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Resources contains the resource requirements and limits for the Vineyard Fuse. Default is not set.",
+							Default:     map[string]interface{}{},
+							Ref:         ref("k8s.io/api/core/v1.ResourceRequirements"),
+						},
+					},
+					"networkMode": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Whether to use hostnetwork or not Default is HostNetwork",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"podMetadata": {
+						SchemaProps: spec.SchemaProps{
+							Description: "PodMetadata defines labels and annotations that will be propagated to Vineyard's pods.",
+							Default:     map[string]interface{}{},
+							Ref:         ref("github.com/fluid-cloudnative/fluid/api/v1alpha1.PodMetadata"),
+						},
+					},
+					"options": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Options for configuring vineyardd parameters. Supported options are as follows.\n  reserve_memory: (Bool) Whether to reserving enough physical memory pages for vineyardd.\n                  Default is true.\n  allocator: (String) The allocator used by vineyardd, could be \"dlmalloc\" or \"mimalloc\".\n             Default is \"dlmalloc\".\n  compression: (Bool) Compress before migration or spilling.\n               Default is true.\n  coredump: (Bool) Enable coredump core dump when been aborted.\n            Default is false.\n  meta_timeout: (Int) Timeout period before waiting the metadata service to be ready, in seconds\n\t\t\t\t   Default is 60.\n  etcd_endpoint: (String) The endpoint of etcd.\n                 Default is same as the etcd endpoint of vineyard worker.\n  etcd_prefix: (String) Metadata path prefix in etcd.\n               Default is \"/vineyard\".\n  size: (String) shared memory size for vineyardd.\n                 1024M, 1024000, 1G, or 1Gi.\n                 Default is \"0\", which means no cache.\n                 When the size is not set to \"0\", it should be greater than the 2048 bytes(2K).\n  spill_path: (String) Path to spill temporary files, if not set, spilling will be disabled.\n              Default is \"\".\n  spill_lower_rate: (Double) The lower rate of memory usage to trigger spilling.\n\t\t\t\t\t   Default is 0.3.\n  spill_upper_rate: (Double) The upper rate of memory usage to stop spilling.\n\t\t\t\t\t   Default is 0.8.\nDefault is as follows. fuse:\n  options:\n    size: \"0\"\n    etcd_endpoint: \"http://{{Name}}-master-0.{{Name}}-master.{{Namespace}}:{{EtcdClientPort}}\"\n\t   etcd_prefix: \"/vineyard\"",
+							Type:        []string{"object"},
+							AdditionalProperties: &spec.SchemaOrBool{
+								Allows: true,
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: "",
+										Type:    []string{"string"},
+										Format:  "",
+									},
+								},
+							},
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"github.com/fluid-cloudnative/fluid/api/v1alpha1.PodMetadata", "k8s.io/api/core/v1.ResourceRequirements"},
+	}
+}
+
 func schema_fluid_cloudnative_fluid_api_v1alpha1_VineyardCompTemplateSpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
@@ -6767,7 +6863,7 @@ func schema_fluid_cloudnative_fluid_api_v1alpha1_VineyardRuntimeSpec(ref common.
 						SchemaProps: spec.SchemaProps{
 							Description: "Fuse holds the configurations for Vineyard client socket. Note that the \"Fuse\" here is kept just for API consistency, VineyardRuntime mount a socket file instead of a FUSE filesystem to make data cache available. Applications can connect to the vineyard runtime components through IPC or RPC. IPC is the default way to connect to vineyard runtime components, which is more efficient than RPC. If the socket file is not mounted, the connection will fall back to RPC.",
 							Default:     map[string]interface{}{},
-							Ref:         ref("github.com/fluid-cloudnative/fluid/api/v1alpha1.VineyardSockSpec"),
+							Ref:         ref("github.com/fluid-cloudnative/fluid/api/v1alpha1.VineyardClientSocketSpec"),
 						},
 					},
 					"tieredstore": {
@@ -6809,87 +6905,7 @@ func schema_fluid_cloudnative_fluid_api_v1alpha1_VineyardRuntimeSpec(ref common.
 			},
 		},
 		Dependencies: []string{
-			"github.com/fluid-cloudnative/fluid/api/v1alpha1.MasterSpec", "github.com/fluid-cloudnative/fluid/api/v1alpha1.PodMetadata", "github.com/fluid-cloudnative/fluid/api/v1alpha1.TieredStore", "github.com/fluid-cloudnative/fluid/api/v1alpha1.VineyardCompTemplateSpec", "github.com/fluid-cloudnative/fluid/api/v1alpha1.VineyardSockSpec", "k8s.io/api/core/v1.Volume"},
-	}
-}
-
-func schema_fluid_cloudnative_fluid_api_v1alpha1_VineyardSockSpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
-	return common.OpenAPIDefinition{
-		Schema: spec.Schema{
-			SchemaProps: spec.SchemaProps{
-				Description: "VineyardSockSpec holds the configurations for vineyard client socket",
-				Type:        []string{"object"},
-				Properties: map[string]spec.Schema{
-					"image": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Image for Vineyard Fuse Default is `vineyardcloudnative/vineyard-fluid-fuse`",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"imageTag": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Image Tag for Vineyard Fuse Default is `v0.21.5`",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"imagePullPolicy": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Image pull policy for Vineyard Fuse Default is `IfNotPresent` Available values are `Always`, `IfNotPresent`, `Never`",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"env": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Environment variables that will be used by Vineyard Fuse. Default is not set.",
-							Type:        []string{"object"},
-							AdditionalProperties: &spec.SchemaOrBool{
-								Allows: true,
-								Schema: &spec.Schema{
-									SchemaProps: spec.SchemaProps{
-										Default: "",
-										Type:    []string{"string"},
-										Format:  "",
-									},
-								},
-							},
-						},
-					},
-					"cleanPolicy": {
-						SchemaProps: spec.SchemaProps{
-							Description: "CleanPolicy decides when to clean Vineyard Fuse pods. Currently Fluid supports two policies: OnDemand and OnRuntimeDeleted OnDemand cleans fuse pod once th fuse pod on some node is not needed OnRuntimeDeleted cleans fuse pod only when the cache runtime is deleted Defaults to OnRuntimeDeleted",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"resources": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Resources contains the resource requirements and limits for the Vineyard Fuse. Default is not set.",
-							Default:     map[string]interface{}{},
-							Ref:         ref("k8s.io/api/core/v1.ResourceRequirements"),
-						},
-					},
-					"networkMode": {
-						SchemaProps: spec.SchemaProps{
-							Description: "Whether to use hostnetwork or not Default is HostNetwork",
-							Type:        []string{"string"},
-							Format:      "",
-						},
-					},
-					"podMetadata": {
-						SchemaProps: spec.SchemaProps{
-							Description: "PodMetadata defines labels and annotations that will be propagated to Vineyard's pods.",
-							Default:     map[string]interface{}{},
-							Ref:         ref("github.com/fluid-cloudnative/fluid/api/v1alpha1.PodMetadata"),
-						},
-					},
-				},
-			},
-		},
-		Dependencies: []string{
-			"github.com/fluid-cloudnative/fluid/api/v1alpha1.PodMetadata", "k8s.io/api/core/v1.ResourceRequirements"},
+			"github.com/fluid-cloudnative/fluid/api/v1alpha1.MasterSpec", "github.com/fluid-cloudnative/fluid/api/v1alpha1.PodMetadata", "github.com/fluid-cloudnative/fluid/api/v1alpha1.TieredStore", "github.com/fluid-cloudnative/fluid/api/v1alpha1.VineyardClientSocketSpec", "github.com/fluid-cloudnative/fluid/api/v1alpha1.VineyardCompTemplateSpec", "k8s.io/api/core/v1.Volume"},
 	}
 }
 
diff --git a/api/v1alpha1/swagger.json b/api/v1alpha1/swagger.json
index e159aa0d..0b1a3e35 100644
--- a/api/v1alpha1/swagger.json
+++ b/api/v1alpha1/swagger.json
@@ -3604,6 +3604,58 @@
         }
       }
     },
+    ".VineyardClientSocketSpec": {
+      "description": "VineyardClientSocketSpec holds the configurations for vineyard client socket",
+      "type": "object",
+      "properties": {
+        "cleanPolicy": {
+          "description": "CleanPolicy decides when to clean Vineyard Fuse pods. Currently Fluid supports two policies: OnDemand and OnRuntimeDeleted OnDemand cleans fuse pod once th fuse pod on some node is not needed OnRuntimeDeleted cleans fuse pod only when the cache runtime is deleted Defaults to OnRuntimeDeleted",
+          "type": "string"
+        },
+        "env": {
+          "description": "Environment variables that will be used by Vineyard Fuse. Default is not set.",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string",
+            "default": ""
+          }
+        },
+        "image": {
+          "description": "Image for Vineyard Fuse Default is `vineyardcloudnative/vineyard-fluid-fuse`",
+          "type": "string"
+        },
+        "imagePullPolicy": {
+          "description": "Image pull policy for Vineyard Fuse Default is `IfNotPresent` Available values are `Always`, `IfNotPresent`, `Never`",
+          "type": "string"
+        },
+        "imageTag": {
+          "description": "Image Tag for Vineyard Fuse Default is `v0.21.5`",
+          "type": "string"
+        },
+        "networkMode": {
+          "description": "Whether to use hostnetwork or not Default is HostNetwork",
+          "type": "string"
+        },
+        "options": {
+          "description": "Options for configuring vineyardd parameters. Supported options are as follows.\n  reserve_memory: (Bool) Whether to reserving enough physical memory pages for vineyardd.\n                  Default is true.\n  allocator: (String) The allocator used by vineyardd, could be \"dlmalloc\" or \"mimalloc\".\n             Default is \"dlmalloc\".\n  compression: (Bool) Compress before migration or spilling.\n               Default is true.\n  coredump: (Bool) Enable coredump core dump when been aborted.\n            Default is false.\n  meta_timeout: (Int) Timeout period before waiting the metadata service to be ready, in seconds\n\t\t\t\t   Default is 60.\n  etcd_endpoint: (String) The endpoint of etcd.\n                 Default is same as the etcd endpoint of vineyard worker.\n  etcd_prefix: (String) Metadata path prefix in etcd.\n               Default is \"/vineyard\".\n  size: (String) shared memory size for vineyardd.\n                 1024M, 1024000, 1G, or 1Gi.\n                 Default is \"0\", which means no cache.\n                 When the size is not set to \"0\", it should be greater than the 2048 bytes(2K).\n  spill_path: (String) Path to spill temporary files, if not set, spilling will be disabled.\n              Default is \"\".\n  spill_lower_rate: (Double) The lower rate of memory usage to trigger spilling.\n\t\t\t\t\t   Default is 0.3.\n  spill_upper_rate: (Double) The upper rate of memory usage to stop spilling.\n\t\t\t\t\t   Default is 0.8.\nDefault is as follows. fuse:\n  options:\n    size: \"0\"\n    etcd_endpoint: \"http://{{Name}}-master-0.{{Name}}-master.{{Namespace}}:{{EtcdClientPort}}\"\n\t   etcd_prefix: \"/vineyard\"",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string",
+            "default": ""
+          }
+        },
+        "podMetadata": {
+          "description": "PodMetadata defines labels and annotations that will be propagated to Vineyard's pods.",
+          "default": {},
+          "$ref": "#/definitions/.PodMetadata"
+        },
+        "resources": {
+          "description": "Resources contains the resource requirements and limits for the Vineyard Fuse. Default is not set.",
+          "default": {},
+          "$ref": "#/definitions/v1.ResourceRequirements"
+        }
+      }
+    },
     ".VineyardCompTemplateSpec": {
       "description": "VineyardCompTemplateSpec is the common configurations for vineyard components including Master and Worker.",
       "type": "object",
@@ -3747,7 +3799,7 @@
         "fuse": {
           "description": "Fuse holds the configurations for Vineyard client socket. Note that the \"Fuse\" here is kept just for API consistency, VineyardRuntime mount a socket file instead of a FUSE filesystem to make data cache available. Applications can connect to the vineyard runtime components through IPC or RPC. IPC is the default way to connect to vineyard runtime components, which is more efficient than RPC. If the socket file is not mounted, the connection will fall back to RPC.",
           "default": {},
-          "$ref": "#/definitions/.VineyardSockSpec"
+          "$ref": "#/definitions/.VineyardClientSocketSpec"
         },
         "master": {
           "description": "Master holds the configurations for Vineyard Master component Represents the Etcd component in Vineyard",
@@ -3784,50 +3836,6 @@
         }
       }
     },
-    ".VineyardSockSpec": {
-      "description": "VineyardSockSpec holds the configurations for vineyard client socket",
-      "type": "object",
-      "properties": {
-        "cleanPolicy": {
-          "description": "CleanPolicy decides when to clean Vineyard Fuse pods. Currently Fluid supports two policies: OnDemand and OnRuntimeDeleted OnDemand cleans fuse pod once th fuse pod on some node is not needed OnRuntimeDeleted cleans fuse pod only when the cache runtime is deleted Defaults to OnRuntimeDeleted",
-          "type": "string"
-        },
-        "env": {
-          "description": "Environment variables that will be used by Vineyard Fuse. Default is not set.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string",
-            "default": ""
-          }
-        },
-        "image": {
-          "description": "Image for Vineyard Fuse Default is `vineyardcloudnative/vineyard-fluid-fuse`",
-          "type": "string"
-        },
-        "imagePullPolicy": {
-          "description": "Image pull policy for Vineyard Fuse Default is `IfNotPresent` Available values are `Always`, `IfNotPresent`, `Never`",
-          "type": "string"
-        },
-        "imageTag": {
-          "description": "Image Tag for Vineyard Fuse Default is `v0.21.5`",
-          "type": "string"
-        },
-        "networkMode": {
-          "description": "Whether to use hostnetwork or not Default is HostNetwork",
-          "type": "string"
-        },
-        "podMetadata": {
-          "description": "PodMetadata defines labels and annotations that will be propagated to Vineyard's pods.",
-          "default": {},
-          "$ref": "#/definitions/.PodMetadata"
-        },
-        "resources": {
-          "description": "Resources contains the resource requirements and limits for the Vineyard Fuse. Default is not set.",
-          "default": {},
-          "$ref": "#/definitions/v1.ResourceRequirements"
-        }
-      }
-    },
     ".VolumeSource": {
       "description": "VolumeSource defines volume source and volume claim template.",
       "type": "object",
diff --git a/api/v1alpha1/vineyardruntime_types.go b/api/v1alpha1/vineyardruntime_types.go
index cb2ad0ca..c63cf955 100644
--- a/api/v1alpha1/vineyardruntime_types.go
+++ b/api/v1alpha1/vineyardruntime_types.go
@@ -151,8 +151,8 @@ type MasterSpec struct {
 	ExternalEndpoint ExternalEndpointSpec `json:"endpoint,omitempty"`
 }
 
-// VineyardSockSpec holds the configurations for vineyard client socket
-type VineyardSockSpec struct {
+// VineyardClientSocketSpec holds the configurations for vineyard client socket
+type VineyardClientSocketSpec struct {
 	// Image for Vineyard Fuse
 	// Default is `vineyardcloudnative/vineyard-fluid-fuse`
 	// +optional
@@ -196,6 +196,42 @@ type VineyardSockSpec struct {
 	// PodMetadata defines labels and annotations that will be propagated to Vineyard's pods.
 	// +optional
 	PodMetadata PodMetadata `json:"podMetadata,omitempty"`
+
+	// Options for configuring vineyardd parameters.
+	// Supported options are as follows.
+	//   reserve_memory: (Bool) Whether to reserving enough physical memory pages for vineyardd.
+	//                   Default is true.
+	//   allocator: (String) The allocator used by vineyardd, could be "dlmalloc" or "mimalloc".
+	//              Default is "dlmalloc".
+	//   compression: (Bool) Compress before migration or spilling.
+	//                Default is true.
+	//   coredump: (Bool) Enable coredump core dump when been aborted.
+	//             Default is false.
+	//   meta_timeout: (Int) Timeout period before waiting the metadata service to be ready, in seconds
+	//				   Default is 60.
+	//   etcd_endpoint: (String) The endpoint of etcd.
+	//                  Default is same as the etcd endpoint of vineyard worker.
+	//   etcd_prefix: (String) Metadata path prefix in etcd.
+	//                Default is "/vineyard".
+	//   size: (String) shared memory size for vineyardd.
+	//                  1024M, 1024000, 1G, or 1Gi.
+	//                  Default is "0", which means no cache.
+	//                  When the size is not set to "0", it should be greater than the 2048 bytes(2K).
+	//   spill_path: (String) Path to spill temporary files, if not set, spilling will be disabled.
+	//               Default is "".
+	//   spill_lower_rate: (Double) The lower rate of memory usage to trigger spilling.
+	//					   Default is 0.3.
+	//   spill_upper_rate: (Double) The upper rate of memory usage to stop spilling.
+	//					   Default is 0.8.
+	// Default is as follows.
+	// fuse:
+	//   options:
+	//     size: "0"
+	//     etcd_endpoint: "http://{{Name}}-master-0.{{Name}}-master.{{Namespace}}:{{EtcdClientPort}}"
+	//	   etcd_prefix: "/vineyard"
+	//
+	// +optional
+	Options map[string]string `json:"options,omitempty"`
 }
 
 // VineyardRuntimeSpec defines the desired state of VineyardRuntime
@@ -220,7 +256,7 @@ type VineyardRuntimeSpec struct {
 	// IPC is the default way to connect to vineyard runtime components, which is more efficient than RPC.
 	// If the socket file is not mounted, the connection will fall back to RPC.
 	// +optional
-	Fuse VineyardSockSpec `json:"fuse,omitempty"`
+	Fuse VineyardClientSocketSpec `json:"fuse,omitempty"`
 
 	// Tiered storage used by vineyardd
 	// The MediumType can only be `MEM` and `SSD`
diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go
index 52e1a9c9..e1aae252 100644
--- a/api/v1alpha1/zz_generated.deepcopy.go
+++ b/api/v1alpha1/zz_generated.deepcopy.go
@@ -2831,6 +2831,37 @@ func (in *VersionSpec) DeepCopy() *VersionSpec {
 	return out
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *VineyardClientSocketSpec) DeepCopyInto(out *VineyardClientSocketSpec) {
+	*out = *in
+	if in.Env != nil {
+		in, out := &in.Env, &out.Env
+		*out = make(map[string]string, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val
+		}
+	}
+	in.Resources.DeepCopyInto(&out.Resources)
+	in.PodMetadata.DeepCopyInto(&out.PodMetadata)
+	if in.Options != nil {
+		in, out := &in.Options, &out.Options
+		*out = make(map[string]string, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VineyardClientSocketSpec.
+func (in *VineyardClientSocketSpec) DeepCopy() *VineyardClientSocketSpec {
+	if in == nil {
+		return nil
+	}
+	out := new(VineyardClientSocketSpec)
+	in.DeepCopyInto(out)
+	return out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *VineyardCompTemplateSpec) DeepCopyInto(out *VineyardCompTemplateSpec) {
 	*out = *in
@@ -2969,30 +3000,6 @@ func (in *VineyardRuntimeSpec) DeepCopy() *VineyardRuntimeSpec {
 	return out
 }
 
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *VineyardSockSpec) DeepCopyInto(out *VineyardSockSpec) {
-	*out = *in
-	if in.Env != nil {
-		in, out := &in.Env, &out.Env
-		*out = make(map[string]string, len(*in))
-		for key, val := range *in {
-			(*out)[key] = val
-		}
-	}
-	in.Resources.DeepCopyInto(&out.Resources)
-	in.PodMetadata.DeepCopyInto(&out.PodMetadata)
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VineyardSockSpec.
-func (in *VineyardSockSpec) DeepCopy() *VineyardSockSpec {
-	if in == nil {
-		return nil
-	}
-	out := new(VineyardSockSpec)
-	in.DeepCopyInto(out)
-	return out
-}
-
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *VolumeSource) DeepCopyInto(out *VolumeSource) {
 	*out = *in
diff --git a/charts/fluid/fluid/Chart.yaml b/charts/fluid/fluid/Chart.yaml
index 24c25fd4..2727cc67 100644
--- a/charts/fluid/fluid/Chart.yaml
+++ b/charts/fluid/fluid/Chart.yaml
@@ -18,7 +18,7 @@ version: 1.0.1
 
 # This is the version number of the application being deployed. This version number should be
 # incremented each time you make changes to the application.
-appVersion: 1.0.1-1be5869
+appVersion: 1.0.1-8601c7f
 home: https://github.com/fluid-cloudnative/fluid
 keywords:
   - category:data
diff --git a/charts/fluid/fluid/crds/data.fluid.io_vineyardruntimes.yaml b/charts/fluid/fluid/crds/data.fluid.io_vineyardruntimes.yaml
index 07dc3055..c724b36f 100644
--- a/charts/fluid/fluid/crds/data.fluid.io_vineyardruntimes.yaml
+++ b/charts/fluid/fluid/crds/data.fluid.io_vineyardruntimes.yaml
@@ -122,6 +122,32 @@ spec:
                     - ""
                     - ContainerNetwork
                     type: string
+                  options:
+                    additionalProperties:
+                      type: string
+                    description: 'Options for configuring vineyardd parameters. Supported
+                      options are as follows. reserve_memory: (Bool) Whether to reserving
+                      enough physical memory pages for vineyardd. Default is true.
+                      allocator: (String) The allocator used by vineyardd, could be
+                      "dlmalloc" or "mimalloc". Default is "dlmalloc". compression:
+                      (Bool) Compress before migration or spilling. Default is true.
+                      coredump: (Bool) Enable coredump core dump when been aborted.
+                      Default is false. meta_timeout: (Int) Timeout period before
+                      waiting the metadata service to be ready, in seconds Default
+                      is 60. etcd_endpoint: (String) The endpoint of etcd. Default
+                      is same as the etcd endpoint of vineyard worker. etcd_prefix:
+                      (String) Metadata path prefix in etcd. Default is "/vineyard".
+                      size: (String) shared memory size for vineyardd. 1024M, 1024000,
+                      1G, or 1Gi. Default is "0", which means no cache. When the size
+                      is not set to "0", it should be greater than the 2048 bytes(2K).
+                      spill_path: (String) Path to spill temporary files, if not set,
+                      spilling will be disabled. Default is "". spill_lower_rate:
+                      (Double) The lower rate of memory usage to trigger spilling.
+                      Default is 0.3. spill_upper_rate: (Double) The upper rate of
+                      memory usage to stop spilling. Default is 0.8. Default is as
+                      follows. fuse: options: size: "0" etcd_endpoint: "http://{{Name}}-master-0.{{Name}}-master.{{Namespace}}:{{EtcdClientPort}}"
+                      etcd_prefix: "/vineyard"'
+                    type: object
                   podMetadata:
                     description: PodMetadata defines labels and annotations that will
                       be propagated to Vineyard's pods.
diff --git a/charts/fluid/fluid/templates/_helpers.tpl b/charts/fluid/fluid/templates/_helpers.tpl
index fe5531c5..7ac641e1 100644
--- a/charts/fluid/fluid/templates/_helpers.tpl
+++ b/charts/fluid/fluid/templates/_helpers.tpl
@@ -93,3 +93,21 @@ Create the name of the service account to use
     - delete
 {{- end -}}
 {{- end -}}
+
+
+{{/*
+Check if feature gate DataflowAffinity is enabled in the featureGates.
+*/}}
+{{- define "fluid.dataflowAffinity.enabled" -}}
+{{- $featureGates := splitList "," .Values.dataset.featureGates }}
+{{- $found := false -}}
+{{- range $idx, $featureGate := $featureGates }}
+    {{- $featureGateKV := splitList "=" $featureGate }}
+    {{- $key :=  trim (index $featureGateKV 0) }}
+    {{- $value := trim (index $featureGateKV 1) }}
+    {{- if and (eq $key "DataflowAffinity") (eq $value "true") -}}
+        {{- $found = true -}}
+    {{- end -}}
+{{- end -}}
+{{- $found -}}
+{{- end -}}
diff --git a/charts/fluid/fluid/templates/controller/dataset_controller.yaml b/charts/fluid/fluid/templates/controller/dataset_controller.yaml
index 4071fb25..ceacd8bd 100644
--- a/charts/fluid/fluid/templates/controller/dataset_controller.yaml
+++ b/charts/fluid/fluid/templates/controller/dataset_controller.yaml
@@ -50,6 +50,7 @@ spec:
           - --pprof-addr=:6060
           - --enable-leader-election
           - --leader-election-namespace={{ include "fluid.namespace" . }}
+          - --feature-gates={{ .Values.dataset.featureGates }}
         env:
           {{- if .Values.workdir }}
           - name: FLUID_WORKDIR
diff --git a/charts/fluid/fluid/templates/role/dataset/rbac.yaml b/charts/fluid/fluid/templates/role/dataset/rbac.yaml
index 38374e2a..df1f70fe 100644
--- a/charts/fluid/fluid/templates/role/dataset/rbac.yaml
+++ b/charts/fluid/fluid/templates/role/dataset/rbac.yaml
@@ -13,6 +13,7 @@ rules:
     - get
     - list
     - watch
+  {{- if eq (include "fluid.dataflowAffinity.enabled" . ) "true" }}
   - apiGroups:
       - ""
     resources:
@@ -21,6 +22,7 @@ rules:
       - get
       - list
       - watch
+  {{- end }}
   - apiGroups:
     - ""
     resources:
diff --git a/charts/fluid/fluid/values.yaml b/charts/fluid/fluid/values.yaml
index 62fe1174..8d2d1163 100644
--- a/charts/fluid/fluid/values.yaml
+++ b/charts/fluid/fluid/values.yaml
@@ -12,7 +12,7 @@ crdUpgrade:
   enabled: true
   # This sets the time-to-live (TTL) for crd-upgrade jobs. Default is 259200 seconds (3 days).
   ttlSecondsAfterFinished: 259200 
-  image: fluidcloudnative/fluid-crd-upgrader:v1.0.1-1be5869
+  image: fluidcloudnative/fluid-crd-upgrader:v1.0.1-8601c7f
 
 ##  if unspecified, will use built-in variable `.Release.Namespace`.
 namespace: fluid-system
@@ -25,7 +25,8 @@ dataset:
   tolerations:
     - operator: Exists
   controller:
-    image: fluidcloudnative/dataset-controller:v1.0.1-1be5869
+    image: fluidcloudnative/dataset-controller:v1.0.1-8601c7f
+  featureGates: "DataflowAffinity=false"
 
 csi:
   tolerations:
@@ -36,7 +37,7 @@ csi:
   registrar:
     image: fluidcloudnative/csi-node-driver-registrar:v2.3.0
   plugins:
-    image: fluidcloudnative/fluid-csi:v1.0.1-1be5869
+    image: fluidcloudnative/fluid-csi:v1.0.1-8601c7f
   kubelet:
     kubeConfigFile: /etc/kubernetes/kubelet.conf
     certDir: /var/lib/kubelet/pki
@@ -63,7 +64,7 @@ runtime:
     init:
       image: fluidcloudnative/init-users:v0.9.0
     controller:
-      image: fluidcloudnative/alluxioruntime-controller:v1.0.1-1be5869
+      image: fluidcloudnative/alluxioruntime-controller:v1.0.1-8601c7f
     runtime:
       image: alluxio/alluxio-dev:2.9.0
     fuse:
@@ -80,11 +81,11 @@ runtime:
     engine: jindocache
     queryUfsTotal: true
     smartdata:
-      image: registry.cn-shanghai.aliyuncs.com/jindofs/smartdata:6.2.0
+      image: registry.cn-shanghai.aliyuncs.com/jindofs/smartdata:6.4.0
     fuse:
-      image: registry.cn-shanghai.aliyuncs.com/jindofs/jindo-fuse:6.2.0
+      image: registry.cn-shanghai.aliyuncs.com/jindofs/jindo-fuse:6.4.0
     controller:
-      image: fluidcloudnative/jindoruntime-controller:v1.0.1-1be5869
+      image: fluidcloudnative/jindoruntime-controller:v1.0.1-8601c7f
     init:
       portCheck:
         enabled: false
@@ -100,7 +101,7 @@ runtime:
     init:
       image: fluidcloudnative/init-users:v0.9.0
     controller:
-      image: fluidcloudnative/goosefsruntime-controller:v1.0.1-1be5869
+      image: fluidcloudnative/goosefsruntime-controller:v1.0.1-8601c7f
     runtime:
       image: ccr.ccs.tencentyun.com/qcloud/goosefs:v1.2.0
     fuse:
@@ -112,7 +113,7 @@ runtime:
     enabled: false
     runtimeWorkers: 3
     controller:
-      image: fluidcloudnative/juicefsruntime-controller:v1.0.1-1be5869
+      image: fluidcloudnative/juicefsruntime-controller:v1.0.1-8601c7f
     fuse:
       ceimage: juicedata/juicefs-fuse:ce-v1.1.0-rc1
       eeimage: juicedata/juicefs-fuse:ee-4.9.16
@@ -122,7 +123,7 @@ runtime:
       - operator: Exists
     enabled: false
     controller:
-      image: fluidcloudnative/thinruntime-controller:v1.0.1-1be5869
+      image: fluidcloudnative/thinruntime-controller:v1.0.1-8601c7f
     fuse:
       configStorage: configmap
   efc:
@@ -131,7 +132,7 @@ runtime:
       - operator: Exists
     enabled: false
     controller:
-      image: fluidcloudnative/efcruntime-controller:v1.0.1-1be5869
+      image: fluidcloudnative/efcruntime-controller:v1.0.1-8601c7f
       imagePullPolicy: Always
     init:
       image: registry.cn-zhangjiakou.aliyuncs.com/nascache/init-alifuse:v1.2.2-19dcee9
@@ -148,7 +149,7 @@ runtime:
       - operator: Exists
     enabled: false
     controller:
-      image: fluidcloudnative/vineyardruntime-controller:v1.0.1-1be5869
+      image: fluidcloudnative/vineyardruntime-controller:v1.0.1-8601c7f
       imagePullPolicy: Always
     master:
       image: bitnami/etcd:3.5.10
@@ -159,7 +160,7 @@ runtime:
 
 webhook:
   enabled: true
-  image: fluidcloudnative/fluid-webhook:v1.0.1-1be5869
+  image: fluidcloudnative/fluid-webhook:v1.0.1-8601c7f
   replicas: 1
   timeoutSeconds: 15
   reinvocationPolicy: IfNeeded
@@ -209,4 +210,4 @@ fluidapp:
   tolerations:
     - operator: Exists
   controller:
-    image: fluidcloudnative/application-controller:v1.0.1-1be5869
+    image: fluidcloudnative/application-controller:v1.0.1-8601c7f
diff --git a/charts/jindocache/CHANGELOG.md b/charts/jindocache/CHANGELOG.md
index 915b8673..27738c0e 100644
--- a/charts/jindocache/CHANGELOG.md
+++ b/charts/jindocache/CHANGELOG.md
@@ -108,3 +108,8 @@ Fix worker's annotations for pod spec overwrites master's annotations
 1.0.2
 Delete runtime's fsGroup
 Mount ufs volumes according to dataset's accessModes
+
+1.0.3
+Fix random read cache block error problem with small probability
+Support write cache to different node with one iostream
+Support rdma network
\ No newline at end of file
diff --git a/charts/jindocache/Chart.yaml b/charts/jindocache/Chart.yaml
index 40744b91..c169ffd4 100755
--- a/charts/jindocache/Chart.yaml
+++ b/charts/jindocache/Chart.yaml
@@ -1,5 +1,5 @@
 apiVersion: v2
-appVersion: 6.2.0
+appVersion: 6.4.0
 version: 1.0.0
 description: FileSystem on the cloud based on Aliyun Object Storage aimed for data
   acceleration.
diff --git a/charts/jindocache/values.yaml b/charts/jindocache/values.yaml
index ab52049d..97229fee 100644
--- a/charts/jindocache/values.yaml
+++ b/charts/jindocache/values.yaml
@@ -4,7 +4,7 @@
 
 
 image: registry-vpc.__ACK_REGION_ID__.aliyuncs.com/jindo/smartdata
-imageTag: "6.2.0"
+imageTag: "6.4.0"
 imagePullPolicy: Always
 
 initPortCheck:
@@ -15,7 +15,7 @@ initPortCheck:
   portsToCheck: ""
 
 fuseImage: registry-vpc.__ACK_REGION_ID__.aliyuncs.com/jindo/jindo-fuse
-fuseImageTag: "6.2.0"
+fuseImageTag: "6.4.0"
 fuseImagePullPolicy: "Always"
 
 user: 0
diff --git a/charts/vineyard/templates/fuse/daemonset.yaml b/charts/vineyard/templates/fuse/daemonset.yaml
index e6c9b5a0..f2b533b7 100644
--- a/charts/vineyard/templates/fuse/daemonset.yaml
+++ b/charts/vineyard/templates/fuse/daemonset.yaml
@@ -90,6 +90,10 @@ spec:
             value: {{ .Values.fuse.targetPath }}/rpc-conf
           - name: PRESTOP_MARKER
             value: /tmp/prestop-marker
+          {{- range $key, $value := .Values.fuse.options }}
+          - name: "{{ upper $key }}"
+            value: "{{ $value }}"
+          {{- end }}
           {{- range $key, $value := .Values.fuse.env }}
           - name: "{{ $key }}"
             value: "{{ $value }}"
diff --git a/charts/vineyard/templates/worker/statefulset.yaml b/charts/vineyard/templates/worker/statefulset.yaml
index ff85855d..d677cb30 100644
--- a/charts/vineyard/templates/worker/statefulset.yaml
+++ b/charts/vineyard/templates/worker/statefulset.yaml
@@ -86,7 +86,7 @@ spec:
           command:
             - /usr/local/bin/vineyardd
             - --socket
-            - /var/run/vineyard/vineyard.sock
+            - /var/run/vineyard/vineyard-worker.sock
             - --size
             - "{{ include "vineyard.worker.size" . }}"
             {{- if eq (toString (index .Values.worker.options "vineyardd.reserve.memory")) "true" }}
@@ -98,6 +98,8 @@ spec:
             - "{{ default "/vineyard" (index .Values.worker.options "etcd.prefix") }}"
             - --etcd_endpoint
             - "{{ include "vineyard.master.endpoint" . }}"
+            - --rpc_socket_port
+            - "{{ int .Values.worker.ports.rpc }}"
             {{- if eq (include "vineyard.checkTieredStore" .) "true" }}
             - --spill_path
             - "{{ include "vineyard.spill.path" . }}"
@@ -111,6 +113,10 @@ spec:
             - --log_dir
             - /var/log/vineyard
             {{- end }}
+          lifecycle:
+            preStop:
+              exec:
+                command: ["sh", "-c", "rm -f /var/run/vineyard/vineyard-worker.sock"]
           env:
           - name: VINEYARDD_NAME
             value: {{ template "vineyard.fullname" . }}-vineyardd
@@ -163,7 +169,7 @@ spec:
             exec:
               command:
               - ls
-              - /var/run/vineyard/vineyard.sock
+              - /var/run/vineyard/vineyard-worker.sock
             initialDelaySeconds: 15
             periodSeconds: 10
             failureThreshold: 10
diff --git a/charts/vineyard/values.yaml b/charts/vineyard/values.yaml
index 4ff5a773..f395ff73 100644
--- a/charts/vineyard/values.yaml
+++ b/charts/vineyard/values.yaml
@@ -133,6 +133,8 @@ fuse:
   targetPath: ""
   nodeSelector: {}
   hostPID: false
+  options:
+    size: "0"
 
 owner:
   enabled: false
diff --git a/cmd/dataset/app/dataset.go b/cmd/dataset/app/dataset.go
index 064a06ab..169abce3 100644
--- a/cmd/dataset/app/dataset.go
+++ b/cmd/dataset/app/dataset.go
@@ -17,6 +17,7 @@ limitations under the License.
 package app
 
 import (
+	utilfeature "github.com/fluid-cloudnative/fluid/pkg/utils/feature"
 	"os"
 	"time"
 
@@ -100,6 +101,8 @@ func init() {
 	datasetCmd.Flags().StringVar(&controllerWorkqueueMaxSyncBackoffStr, "workqueue-max-sync-backoff", "1000s", "max backoff period for failed reconciliation in controller's workqueue")
 	datasetCmd.Flags().IntVar(&controllerWorkqueueQPS, "workqueue-qps", 10, "qps limit value for controller's workqueue")
 	datasetCmd.Flags().IntVar(&controllerWorkqueueBurst, "workqueue-burst", 100, "burst limit value for controller's workqueue")
+
+	utilfeature.DefaultMutableFeatureGate.AddFlag(datasetCmd.Flags())
 }
 
 func handle() {
diff --git a/cmd/goosefs/app/version.go b/cmd/goosefs/app/version.go
index 0713e52a..c1003351 100644
--- a/cmd/goosefs/app/version.go
+++ b/cmd/goosefs/app/version.go
@@ -1,9 +1,11 @@
 /*
+Copyright 2021 The Fluid Authors.
+
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
 
-	http://www.apache.org/licenses/LICENSE-2.0
+    http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
@@ -11,6 +13,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 */
+
 package app
 
 import (
diff --git a/cmd/jindo/app/jindo.go b/cmd/jindo/app/jindo.go
index 2dea91e9..786db05e 100644
--- a/cmd/jindo/app/jindo.go
+++ b/cmd/jindo/app/jindo.go
@@ -1,5 +1,5 @@
 /*
-Copyright 2021 The Fluid Authors.
+Copyright 2022 The Fluid Authors.
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff --git a/config/crd/bases/data.fluid.io_vineyardruntimes.yaml b/config/crd/bases/data.fluid.io_vineyardruntimes.yaml
index 07dc3055..c724b36f 100644
--- a/config/crd/bases/data.fluid.io_vineyardruntimes.yaml
+++ b/config/crd/bases/data.fluid.io_vineyardruntimes.yaml
@@ -122,6 +122,32 @@ spec:
                     - ""
                     - ContainerNetwork
                     type: string
+                  options:
+                    additionalProperties:
+                      type: string
+                    description: 'Options for configuring vineyardd parameters. Supported
+                      options are as follows. reserve_memory: (Bool) Whether to reserving
+                      enough physical memory pages for vineyardd. Default is true.
+                      allocator: (String) The allocator used by vineyardd, could be
+                      "dlmalloc" or "mimalloc". Default is "dlmalloc". compression:
+                      (Bool) Compress before migration or spilling. Default is true.
+                      coredump: (Bool) Enable coredump core dump when been aborted.
+                      Default is false. meta_timeout: (Int) Timeout period before
+                      waiting the metadata service to be ready, in seconds Default
+                      is 60. etcd_endpoint: (String) The endpoint of etcd. Default
+                      is same as the etcd endpoint of vineyard worker. etcd_prefix:
+                      (String) Metadata path prefix in etcd. Default is "/vineyard".
+                      size: (String) shared memory size for vineyardd. 1024M, 1024000,
+                      1G, or 1Gi. Default is "0", which means no cache. When the size
+                      is not set to "0", it should be greater than the 2048 bytes(2K).
+                      spill_path: (String) Path to spill temporary files, if not set,
+                      spilling will be disabled. Default is "". spill_lower_rate:
+                      (Double) The lower rate of memory usage to trigger spilling.
+                      Default is 0.3. spill_upper_rate: (Double) The upper rate of
+                      memory usage to stop spilling. Default is 0.8. Default is as
+                      follows. fuse: options: size: "0" etcd_endpoint: "http://{{Name}}-master-0.{{Name}}-master.{{Namespace}}:{{EtcdClientPort}}"
+                      etcd_prefix: "/vineyard"'
+                    type: object
                   podMetadata:
                     description: PodMetadata defines labels and annotations that will
                       be propagated to Vineyard's pods.
diff --git a/docs/en/dev/api_doc.md b/docs/en/dev/api_doc.md
index a8a98c29..fa854f51 100644
--- a/docs/en/dev/api_doc.md
+++ b/docs/en/dev/api_doc.md
@@ -2392,8 +2392,8 @@ If worker.replicas and the field are both specified, the field will be respected
 <td>
 <code>fuse</code></br>
 <em>
-<a href="#data.fluid.io/v1alpha1.VineyardSockSpec">
-VineyardSockSpec
+<a href="#data.fluid.io/v1alpha1.VineyardClientSocketSpec">
+VineyardClientSocketSpec
 </a>
 </em>
 </td>
@@ -5293,7 +5293,7 @@ string
 <a href="#data.fluid.io/v1alpha1.JindoFuseSpec">JindoFuseSpec</a>, 
 <a href="#data.fluid.io/v1alpha1.JuiceFSFuseSpec">JuiceFSFuseSpec</a>, 
 <a href="#data.fluid.io/v1alpha1.ThinFuseSpec">ThinFuseSpec</a>, 
-<a href="#data.fluid.io/v1alpha1.VineyardSockSpec">VineyardSockSpec</a>)
+<a href="#data.fluid.io/v1alpha1.VineyardClientSocketSpec">VineyardClientSocketSpec</a>)
 </p>
 <p>
 </p>
@@ -7516,8 +7516,8 @@ bool
 <a href="#data.fluid.io/v1alpha1.JuiceFSFuseSpec">JuiceFSFuseSpec</a>, 
 <a href="#data.fluid.io/v1alpha1.ThinCompTemplateSpec">ThinCompTemplateSpec</a>, 
 <a href="#data.fluid.io/v1alpha1.ThinFuseSpec">ThinFuseSpec</a>, 
-<a href="#data.fluid.io/v1alpha1.VineyardCompTemplateSpec">VineyardCompTemplateSpec</a>, 
-<a href="#data.fluid.io/v1alpha1.VineyardSockSpec">VineyardSockSpec</a>)
+<a href="#data.fluid.io/v1alpha1.VineyardClientSocketSpec">VineyardClientSocketSpec</a>, 
+<a href="#data.fluid.io/v1alpha1.VineyardCompTemplateSpec">VineyardCompTemplateSpec</a>)
 </p>
 <p>
 </p>
@@ -7806,9 +7806,9 @@ Kubernetes core/v1.NodeAffinity
 <a href="#data.fluid.io/v1alpha1.JuiceFSRuntimeSpec">JuiceFSRuntimeSpec</a>, 
 <a href="#data.fluid.io/v1alpha1.Metadata">Metadata</a>, 
 <a href="#data.fluid.io/v1alpha1.Processor">Processor</a>, 
+<a href="#data.fluid.io/v1alpha1.VineyardClientSocketSpec">VineyardClientSocketSpec</a>, 
 <a href="#data.fluid.io/v1alpha1.VineyardCompTemplateSpec">VineyardCompTemplateSpec</a>, 
-<a href="#data.fluid.io/v1alpha1.VineyardRuntimeSpec">VineyardRuntimeSpec</a>, 
-<a href="#data.fluid.io/v1alpha1.VineyardSockSpec">VineyardSockSpec</a>)
+<a href="#data.fluid.io/v1alpha1.VineyardRuntimeSpec">VineyardRuntimeSpec</a>)
 </p>
 <p>
 <p>PodMetadata defines subgroup properties of metav1.ObjectMeta</p>
@@ -9977,6 +9977,183 @@ string
 </tr>
 </tbody>
 </table>
+<h3 id="data.fluid.io/v1alpha1.VineyardClientSocketSpec">VineyardClientSocketSpec
+</h3>
+<p>
+(<em>Appears on:</em>
+<a href="#data.fluid.io/v1alpha1.VineyardRuntimeSpec">VineyardRuntimeSpec</a>)
+</p>
+<p>
+<p>VineyardClientSocketSpec holds the configurations for vineyard client socket</p>
+</p>
+<table>
+<thead>
+<tr>
+<th>Field</th>
+<th>Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>
+<code>image</code></br>
+<em>
+string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Image for Vineyard Fuse
+Default is <code>vineyardcloudnative/vineyard-fluid-fuse</code></p>
+</td>
+</tr>
+<tr>
+<td>
+<code>imageTag</code></br>
+<em>
+string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Image Tag for Vineyard Fuse
+Default is <code>v0.21.5</code></p>
+</td>
+</tr>
+<tr>
+<td>
+<code>imagePullPolicy</code></br>
+<em>
+string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Image pull policy for Vineyard Fuse
+Default is <code>IfNotPresent</code>
+Available values are <code>Always</code>, <code>IfNotPresent</code>, <code>Never</code></p>
+</td>
+</tr>
+<tr>
+<td>
+<code>env</code></br>
+<em>
+map[string]string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Environment variables that will be used by Vineyard Fuse.
+Default is not set.</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>cleanPolicy</code></br>
+<em>
+<a href="#data.fluid.io/v1alpha1.FuseCleanPolicy">
+FuseCleanPolicy
+</a>
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>CleanPolicy decides when to clean Vineyard Fuse pods.
+Currently Fluid supports two policies: OnDemand and OnRuntimeDeleted
+OnDemand cleans fuse pod once th fuse pod on some node is not needed
+OnRuntimeDeleted cleans fuse pod only when the cache runtime is deleted
+Defaults to OnRuntimeDeleted</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>resources</code></br>
+<em>
+<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#resourcerequirements-v1-core">
+Kubernetes core/v1.ResourceRequirements
+</a>
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Resources contains the resource requirements and limits for the Vineyard Fuse.
+Default is not set.</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>networkMode</code></br>
+<em>
+<a href="#data.fluid.io/v1alpha1.NetworkMode">
+NetworkMode
+</a>
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Whether to use hostnetwork or not
+Default is HostNetwork</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>podMetadata</code></br>
+<em>
+<a href="#data.fluid.io/v1alpha1.PodMetadata">
+PodMetadata
+</a>
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>PodMetadata defines labels and annotations that will be propagated to Vineyard&rsquo;s pods.</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>options</code></br>
+<em>
+map[string]string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Options for configuring vineyardd parameters.
+Supported options are as follows.
+reserve_memory: (Bool) Whether to reserving enough physical memory pages for vineyardd.
+Default is true.
+allocator: (String) The allocator used by vineyardd, could be &ldquo;dlmalloc&rdquo; or &ldquo;mimalloc&rdquo;.
+Default is &ldquo;dlmalloc&rdquo;.
+compression: (Bool) Compress before migration or spilling.
+Default is true.
+coredump: (Bool) Enable coredump core dump when been aborted.
+Default is false.
+meta_timeout: (Int) Timeout period before waiting the metadata service to be ready, in seconds
+Default is 60.
+etcd_endpoint: (String) The endpoint of etcd.
+Default is same as the etcd endpoint of vineyard worker.
+etcd_prefix: (String) Metadata path prefix in etcd.
+Default is &ldquo;/vineyard&rdquo;.
+size: (String) shared memory size for vineyardd.
+1024M, 1024000, 1G, or 1Gi.
+Default is &ldquo;0&rdquo;, which means no cache.
+When the size is not set to &ldquo;0&rdquo;, it should be greater than the 2048 bytes(2K).
+spill_path: (String) Path to spill temporary files, if not set, spilling will be disabled.
+Default is &ldquo;&rdquo;.
+spill_lower_rate: (Double) The lower rate of memory usage to trigger spilling.
+Default is 0.3.
+spill_upper_rate: (Double) The upper rate of memory usage to stop spilling.
+Default is 0.8.
+Default is as follows.
+fuse:
+options:
+size: &ldquo;0&rdquo;
+etcd_endpoint: &ldquo;http://{{Name}}-master-0.{{Name}}-master.{{Namespace}}:{{EtcdClientPort}}&rdquo;
+etcd_prefix: &ldquo;/vineyard&rdquo;</p>
+</td>
+</tr>
+</tbody>
+</table>
 <h3 id="data.fluid.io/v1alpha1.VineyardCompTemplateSpec">VineyardCompTemplateSpec
 </h3>
 <p>
@@ -10243,8 +10420,8 @@ If worker.replicas and the field are both specified, the field will be respected
 <td>
 <code>fuse</code></br>
 <em>
-<a href="#data.fluid.io/v1alpha1.VineyardSockSpec">
-VineyardSockSpec
+<a href="#data.fluid.io/v1alpha1.VineyardClientSocketSpec">
+VineyardClientSocketSpec
 </a>
 </em>
 </td>
@@ -10337,140 +10514,6 @@ Default is null.</p>
 </tr>
 </tbody>
 </table>
-<h3 id="data.fluid.io/v1alpha1.VineyardSockSpec">VineyardSockSpec
-</h3>
-<p>
-(<em>Appears on:</em>
-<a href="#data.fluid.io/v1alpha1.VineyardRuntimeSpec">VineyardRuntimeSpec</a>)
-</p>
-<p>
-<p>VineyardSockSpec holds the configurations for vineyard client socket</p>
-</p>
-<table>
-<thead>
-<tr>
-<th>Field</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>
-<code>image</code></br>
-<em>
-string
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>Image for Vineyard Fuse
-Default is <code>vineyardcloudnative/vineyard-fluid-fuse</code></p>
-</td>
-</tr>
-<tr>
-<td>
-<code>imageTag</code></br>
-<em>
-string
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>Image Tag for Vineyard Fuse
-Default is <code>v0.21.5</code></p>
-</td>
-</tr>
-<tr>
-<td>
-<code>imagePullPolicy</code></br>
-<em>
-string
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>Image pull policy for Vineyard Fuse
-Default is <code>IfNotPresent</code>
-Available values are <code>Always</code>, <code>IfNotPresent</code>, <code>Never</code></p>
-</td>
-</tr>
-<tr>
-<td>
-<code>env</code></br>
-<em>
-map[string]string
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>Environment variables that will be used by Vineyard Fuse.
-Default is not set.</p>
-</td>
-</tr>
-<tr>
-<td>
-<code>cleanPolicy</code></br>
-<em>
-<a href="#data.fluid.io/v1alpha1.FuseCleanPolicy">
-FuseCleanPolicy
-</a>
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>CleanPolicy decides when to clean Vineyard Fuse pods.
-Currently Fluid supports two policies: OnDemand and OnRuntimeDeleted
-OnDemand cleans fuse pod once th fuse pod on some node is not needed
-OnRuntimeDeleted cleans fuse pod only when the cache runtime is deleted
-Defaults to OnRuntimeDeleted</p>
-</td>
-</tr>
-<tr>
-<td>
-<code>resources</code></br>
-<em>
-<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#resourcerequirements-v1-core">
-Kubernetes core/v1.ResourceRequirements
-</a>
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>Resources contains the resource requirements and limits for the Vineyard Fuse.
-Default is not set.</p>
-</td>
-</tr>
-<tr>
-<td>
-<code>networkMode</code></br>
-<em>
-<a href="#data.fluid.io/v1alpha1.NetworkMode">
-NetworkMode
-</a>
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>Whether to use hostnetwork or not
-Default is HostNetwork</p>
-</td>
-</tr>
-<tr>
-<td>
-<code>podMetadata</code></br>
-<em>
-<a href="#data.fluid.io/v1alpha1.PodMetadata">
-PodMetadata
-</a>
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>PodMetadata defines labels and annotations that will be propagated to Vineyard&rsquo;s pods.</p>
-</td>
-</tr>
-</tbody>
-</table>
 <h3 id="data.fluid.io/v1alpha1.VolumeSource">VolumeSource
 </h3>
 <p>
diff --git a/docs/en/samples/vineyard/configure_cache_size_of_vineyard_fuse.md b/docs/en/samples/vineyard/configure_cache_size_of_vineyard_fuse.md
new file mode 100644
index 00000000..3a377d49
--- /dev/null
+++ b/docs/en/samples/vineyard/configure_cache_size_of_vineyard_fuse.md
@@ -0,0 +1,218 @@
+## How to configure the cache size of Vineyard Fuse
+
+Before you begin, we'd better have a basic understanding of the [Vineyard Fuse](https://github.com/v6d-io/v6d/tree/main/docker/vineyard-fluid-fuse). It mainly creates the vineyard client configurations in the application pod and defines the priority of different vineyard sockets.
+
+For example, suppose we have enabled the cache of vineyard fuse, a local vineyardd will be started in the fuse container, and it will connect to the vineyard master. The new vineyardd will create a vineyard socket named `vineyard-local.sock` in the pod, and the vineyard fuse will also create the symbolic link `vineyard-worker.sock` to pod if the fuse pod runs on the same node as the vineyard worker. In this case, we will put the vineyard socket `vineyard-local.sock` in the first place in the vineyard client configurations YAML. When the application connects to the vineyard, it will first try to put and get data from the local vineyardd. If it's out of memory, it will fall back to the vineyard worker. Thus, we can regard the vineyard fuse as a local cache of the external vineyard workers.
+
+## Install fluid
+
+Refer to the [Installation Documentation](../../userguide/install.md) to complete the installation.
+
+## Create Vineyard Runtime and set the fuse cache size to 0
+
+If you don't set the cache size of vineyard fuse, the default value is 0. To make it
+clear, we set the cache size to 0 explicitly.
+
+```shell
+$ cat <<EOF | kubectl apply -f -
+apiVersion: data.fluid.io/v1alpha1
+kind: VineyardRuntime
+metadata:
+  name: vineyard
+spec:
+  replicas: 2
+  tieredstore:
+    levels:
+    - mediumtype: MEM
+      quota: 20Gi
+  fuse:
+    options:
+      # Not to start the local vineyardd in the vineyard fuse container
+      size: "0"
+---
+apiVersion: data.fluid.io/v1alpha1
+kind: Dataset
+metadata:
+  name: vineyard
+EOF
+```
+
+Check if the `Vineyard Runtime` is created successfully:
+
+```shell
+$ kubectl get vineyardRuntime vineyard 
+NAME       MASTER PHASE   WORKER PHASE   FUSE PHASE   AGE
+vineyard   Ready          PartialReady   Ready        59s
+```
+
+Then look at the status of the `Vineyard Dataset` and notice that it has been bound to the `Vineyard Runtime`:
+
+```shell
+$ kubectl get dataset vineyard
+NAME       UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
+vineyard                                                                  Bound   73s
+```
+
+### [Serverful Mode] Create an Application Pod and Mount the Vineyard Dataset
+
+Add the label `fuse.serverful.fluid.io/inject: "true"` to make the pod scheduled to the node where the vineyard worker is running.
+
+```shell
+$ cat <<EOF | kubectl apply -f -
+apiVersion: v1
+kind: Pod
+metadata:
+  name: demo-app
+  labels:
+    fuse.serverful.fluid.io/inject: "true"
+spec:
+  containers:
+    - name: demo
+      image: python:3.10
+      command:
+        - /bin/bash
+        - -c
+        - |
+          pip3 install vineyard;
+          sleep infinity
+      volumeMounts:
+        - mountPath: /var/run/vineyard
+          name: client-configuration
+  volumes:
+    - name: client-configuration
+      persistentVolumeClaim:
+        claimName: vineyard
+EOF
+```
+
+Then we can check the client configurations in the pod, and notice there is only one vineyard socket named `vineyard-worker.sock`.
+
+```shell
+$ kubectl exec -it demo-app -- ls /var/run/vineyard
+rpc-conf  vineyard-config.yaml  vineyard-worker.sock
+
+$ kubectl exec -it demo-app -- cat /var/run/vineyard/vineyard-config.yaml                    
+Vineyard:
+  IPCSocket: vineyard-worker.sock
+  RPCEndpoint: vineyard-worker-0.vineyard-worker.default:9600,vineyard-worker-1.vineyard-worker.default:9600
+```
+
+Connect to the vineyard worker in the pod.
+
+```shell
+$  kubectl exec -it demo-app -- python
+Python 3.10.14 (main, Mar 25 2024, 21:45:25) [GCC 12.2.0] on linux
+Type "help", "copyright", "credits" or "license" for more information.
+>>> import vineyard
+>>> client = vineyard.connect()
+>>> client.status
+{
+    instance_id: 0,
+    deployment: local,
+    memory_usage: 0,
+    memory_limit: 21474836480,
+    deferred_requests: 0,
+    ipc_connections: 0,
+    rpc_connections: 1
+}
+```
+
+## Create Vineyard Runtime and set the fuse cache size to 1Gi
+
+Add the option `size: "1Gi"` to enable the cache of vineyard fuse and set the cache size to 1Gi.
+
+```shell
+$ cat <<EOF | kubectl apply -f -
+apiVersion: data.fluid.io/v1alpha1
+kind: VineyardRuntime
+metadata:
+  name: vineyard-with-fuse-cache
+spec:
+  replicas: 2
+  tieredstore:
+    levels:
+    - mediumtype: MEM
+      quota: 20Gi
+  fuse:
+    options:
+      # Start the local vineyardd with 1Gi memory in the vineyard fuse container
+      size: "1Gi"
+---
+apiVersion: data.fluid.io/v1alpha1
+kind: Dataset
+metadata:
+  name: vineyard-with-fuse-cache
+EOF
+```
+
+### [Serverful Mode] Create an Application Pod and Mount the Vineyard Dataset
+
+```shell
+$ cat <<EOF | kubectl apply -f -
+apiVersion: v1
+kind: Pod
+metadata:
+  name: demo-app
+  labels:
+    fuse.serverful.fluid.io/inject: "true"
+spec:
+  containers:
+    - name: demo
+      image: python:3.10
+      command:
+        - /bin/bash
+        - -c
+        - |
+          pip3 install vineyard;
+          sleep infinity
+      volumeMounts:
+        - mountPath: /var/run/vineyard
+          name: client-configuration
+  volumes:
+    - name: client-configuration
+      persistentVolumeClaim:
+        claimName: vineyard-with-fuse-cache
+EOF
+```
+
+Check the status of Vineyard FUSE:
+
+```shell
+$ kubectl get po | grep vineyard-with-fuse-cache-fuse
+vineyard-with-fuse-cache-fuse-chd9w   1/1     Running   0          110s
+```
+
+Then we can check the client configurations in the pod, and notice there are two vineyard sockets named `vineyard-local.sock` and `vineyard-worker.sock`. In the client
+configurations YAML, the `vineyard-local.sock` is in the first place, which means the application will first try to put and get data from the local vineyardd.
+
+```shell
+$ kubectl exec -it demo-app -- ls /var/run/vineyard
+rpc-conf  vineyard-config.yaml  vineyard-local.sock  vineyard-worker.sock
+
+# Check the vineyard client configurations
+$ kubectl exec -it demo-app -- cat /var/run/vineyard/vineyard-config.yaml                    
+Vineyard:
+  IPCSocket: vineyard-local.sock
+  RPCEndpoint: vineyard-with-fuse-cache-worker-0.vineyard-with-fuse-cache-worker.default:9600,vineyard-with-fuse-cache-worker-1.vineyard-with-fuse-cache-worker.default:9600
+```
+
+We can find if we connect to the vineyard with the default configurations, the local
+vineyardd will be used first.
+
+```shell
+$  kubectl exec -it demo-app -- python
+Python 3.10.14 (main, Mar 25 2024, 21:45:25) [GCC 12.2.0] on linux
+Type "help", "copyright", "credits" or "license" for more information.
+>>> import vineyard
+>>> client = vineyard.connect()
+>>> client.status
+{
+    instance_id: 2,
+    deployment: local,
+    memory_usage: 0,
+    memory_limit: 1073741824, # 1Gi, not 20Gi in vineyard worker
+    deferred_requests: 0,
+    ipc_connections: 1,
+    rpc_connections: 0
+}
+```
diff --git a/docs/zh/dev/api_doc.md b/docs/zh/dev/api_doc.md
index a8a98c29..fa854f51 100644
--- a/docs/zh/dev/api_doc.md
+++ b/docs/zh/dev/api_doc.md
@@ -2392,8 +2392,8 @@ If worker.replicas and the field are both specified, the field will be respected
 <td>
 <code>fuse</code></br>
 <em>
-<a href="#data.fluid.io/v1alpha1.VineyardSockSpec">
-VineyardSockSpec
+<a href="#data.fluid.io/v1alpha1.VineyardClientSocketSpec">
+VineyardClientSocketSpec
 </a>
 </em>
 </td>
@@ -5293,7 +5293,7 @@ string
 <a href="#data.fluid.io/v1alpha1.JindoFuseSpec">JindoFuseSpec</a>, 
 <a href="#data.fluid.io/v1alpha1.JuiceFSFuseSpec">JuiceFSFuseSpec</a>, 
 <a href="#data.fluid.io/v1alpha1.ThinFuseSpec">ThinFuseSpec</a>, 
-<a href="#data.fluid.io/v1alpha1.VineyardSockSpec">VineyardSockSpec</a>)
+<a href="#data.fluid.io/v1alpha1.VineyardClientSocketSpec">VineyardClientSocketSpec</a>)
 </p>
 <p>
 </p>
@@ -7516,8 +7516,8 @@ bool
 <a href="#data.fluid.io/v1alpha1.JuiceFSFuseSpec">JuiceFSFuseSpec</a>, 
 <a href="#data.fluid.io/v1alpha1.ThinCompTemplateSpec">ThinCompTemplateSpec</a>, 
 <a href="#data.fluid.io/v1alpha1.ThinFuseSpec">ThinFuseSpec</a>, 
-<a href="#data.fluid.io/v1alpha1.VineyardCompTemplateSpec">VineyardCompTemplateSpec</a>, 
-<a href="#data.fluid.io/v1alpha1.VineyardSockSpec">VineyardSockSpec</a>)
+<a href="#data.fluid.io/v1alpha1.VineyardClientSocketSpec">VineyardClientSocketSpec</a>, 
+<a href="#data.fluid.io/v1alpha1.VineyardCompTemplateSpec">VineyardCompTemplateSpec</a>)
 </p>
 <p>
 </p>
@@ -7806,9 +7806,9 @@ Kubernetes core/v1.NodeAffinity
 <a href="#data.fluid.io/v1alpha1.JuiceFSRuntimeSpec">JuiceFSRuntimeSpec</a>, 
 <a href="#data.fluid.io/v1alpha1.Metadata">Metadata</a>, 
 <a href="#data.fluid.io/v1alpha1.Processor">Processor</a>, 
+<a href="#data.fluid.io/v1alpha1.VineyardClientSocketSpec">VineyardClientSocketSpec</a>, 
 <a href="#data.fluid.io/v1alpha1.VineyardCompTemplateSpec">VineyardCompTemplateSpec</a>, 
-<a href="#data.fluid.io/v1alpha1.VineyardRuntimeSpec">VineyardRuntimeSpec</a>, 
-<a href="#data.fluid.io/v1alpha1.VineyardSockSpec">VineyardSockSpec</a>)
+<a href="#data.fluid.io/v1alpha1.VineyardRuntimeSpec">VineyardRuntimeSpec</a>)
 </p>
 <p>
 <p>PodMetadata defines subgroup properties of metav1.ObjectMeta</p>
@@ -9977,6 +9977,183 @@ string
 </tr>
 </tbody>
 </table>
+<h3 id="data.fluid.io/v1alpha1.VineyardClientSocketSpec">VineyardClientSocketSpec
+</h3>
+<p>
+(<em>Appears on:</em>
+<a href="#data.fluid.io/v1alpha1.VineyardRuntimeSpec">VineyardRuntimeSpec</a>)
+</p>
+<p>
+<p>VineyardClientSocketSpec holds the configurations for vineyard client socket</p>
+</p>
+<table>
+<thead>
+<tr>
+<th>Field</th>
+<th>Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>
+<code>image</code></br>
+<em>
+string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Image for Vineyard Fuse
+Default is <code>vineyardcloudnative/vineyard-fluid-fuse</code></p>
+</td>
+</tr>
+<tr>
+<td>
+<code>imageTag</code></br>
+<em>
+string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Image Tag for Vineyard Fuse
+Default is <code>v0.21.5</code></p>
+</td>
+</tr>
+<tr>
+<td>
+<code>imagePullPolicy</code></br>
+<em>
+string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Image pull policy for Vineyard Fuse
+Default is <code>IfNotPresent</code>
+Available values are <code>Always</code>, <code>IfNotPresent</code>, <code>Never</code></p>
+</td>
+</tr>
+<tr>
+<td>
+<code>env</code></br>
+<em>
+map[string]string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Environment variables that will be used by Vineyard Fuse.
+Default is not set.</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>cleanPolicy</code></br>
+<em>
+<a href="#data.fluid.io/v1alpha1.FuseCleanPolicy">
+FuseCleanPolicy
+</a>
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>CleanPolicy decides when to clean Vineyard Fuse pods.
+Currently Fluid supports two policies: OnDemand and OnRuntimeDeleted
+OnDemand cleans fuse pod once th fuse pod on some node is not needed
+OnRuntimeDeleted cleans fuse pod only when the cache runtime is deleted
+Defaults to OnRuntimeDeleted</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>resources</code></br>
+<em>
+<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#resourcerequirements-v1-core">
+Kubernetes core/v1.ResourceRequirements
+</a>
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Resources contains the resource requirements and limits for the Vineyard Fuse.
+Default is not set.</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>networkMode</code></br>
+<em>
+<a href="#data.fluid.io/v1alpha1.NetworkMode">
+NetworkMode
+</a>
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Whether to use hostnetwork or not
+Default is HostNetwork</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>podMetadata</code></br>
+<em>
+<a href="#data.fluid.io/v1alpha1.PodMetadata">
+PodMetadata
+</a>
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>PodMetadata defines labels and annotations that will be propagated to Vineyard&rsquo;s pods.</p>
+</td>
+</tr>
+<tr>
+<td>
+<code>options</code></br>
+<em>
+map[string]string
+</em>
+</td>
+<td>
+<em>(Optional)</em>
+<p>Options for configuring vineyardd parameters.
+Supported options are as follows.
+reserve_memory: (Bool) Whether to reserving enough physical memory pages for vineyardd.
+Default is true.
+allocator: (String) The allocator used by vineyardd, could be &ldquo;dlmalloc&rdquo; or &ldquo;mimalloc&rdquo;.
+Default is &ldquo;dlmalloc&rdquo;.
+compression: (Bool) Compress before migration or spilling.
+Default is true.
+coredump: (Bool) Enable coredump core dump when been aborted.
+Default is false.
+meta_timeout: (Int) Timeout period before waiting the metadata service to be ready, in seconds
+Default is 60.
+etcd_endpoint: (String) The endpoint of etcd.
+Default is same as the etcd endpoint of vineyard worker.
+etcd_prefix: (String) Metadata path prefix in etcd.
+Default is &ldquo;/vineyard&rdquo;.
+size: (String) shared memory size for vineyardd.
+1024M, 1024000, 1G, or 1Gi.
+Default is &ldquo;0&rdquo;, which means no cache.
+When the size is not set to &ldquo;0&rdquo;, it should be greater than the 2048 bytes(2K).
+spill_path: (String) Path to spill temporary files, if not set, spilling will be disabled.
+Default is &ldquo;&rdquo;.
+spill_lower_rate: (Double) The lower rate of memory usage to trigger spilling.
+Default is 0.3.
+spill_upper_rate: (Double) The upper rate of memory usage to stop spilling.
+Default is 0.8.
+Default is as follows.
+fuse:
+options:
+size: &ldquo;0&rdquo;
+etcd_endpoint: &ldquo;http://{{Name}}-master-0.{{Name}}-master.{{Namespace}}:{{EtcdClientPort}}&rdquo;
+etcd_prefix: &ldquo;/vineyard&rdquo;</p>
+</td>
+</tr>
+</tbody>
+</table>
 <h3 id="data.fluid.io/v1alpha1.VineyardCompTemplateSpec">VineyardCompTemplateSpec
 </h3>
 <p>
@@ -10243,8 +10420,8 @@ If worker.replicas and the field are both specified, the field will be respected
 <td>
 <code>fuse</code></br>
 <em>
-<a href="#data.fluid.io/v1alpha1.VineyardSockSpec">
-VineyardSockSpec
+<a href="#data.fluid.io/v1alpha1.VineyardClientSocketSpec">
+VineyardClientSocketSpec
 </a>
 </em>
 </td>
@@ -10337,140 +10514,6 @@ Default is null.</p>
 </tr>
 </tbody>
 </table>
-<h3 id="data.fluid.io/v1alpha1.VineyardSockSpec">VineyardSockSpec
-</h3>
-<p>
-(<em>Appears on:</em>
-<a href="#data.fluid.io/v1alpha1.VineyardRuntimeSpec">VineyardRuntimeSpec</a>)
-</p>
-<p>
-<p>VineyardSockSpec holds the configurations for vineyard client socket</p>
-</p>
-<table>
-<thead>
-<tr>
-<th>Field</th>
-<th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>
-<code>image</code></br>
-<em>
-string
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>Image for Vineyard Fuse
-Default is <code>vineyardcloudnative/vineyard-fluid-fuse</code></p>
-</td>
-</tr>
-<tr>
-<td>
-<code>imageTag</code></br>
-<em>
-string
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>Image Tag for Vineyard Fuse
-Default is <code>v0.21.5</code></p>
-</td>
-</tr>
-<tr>
-<td>
-<code>imagePullPolicy</code></br>
-<em>
-string
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>Image pull policy for Vineyard Fuse
-Default is <code>IfNotPresent</code>
-Available values are <code>Always</code>, <code>IfNotPresent</code>, <code>Never</code></p>
-</td>
-</tr>
-<tr>
-<td>
-<code>env</code></br>
-<em>
-map[string]string
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>Environment variables that will be used by Vineyard Fuse.
-Default is not set.</p>
-</td>
-</tr>
-<tr>
-<td>
-<code>cleanPolicy</code></br>
-<em>
-<a href="#data.fluid.io/v1alpha1.FuseCleanPolicy">
-FuseCleanPolicy
-</a>
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>CleanPolicy decides when to clean Vineyard Fuse pods.
-Currently Fluid supports two policies: OnDemand and OnRuntimeDeleted
-OnDemand cleans fuse pod once th fuse pod on some node is not needed
-OnRuntimeDeleted cleans fuse pod only when the cache runtime is deleted
-Defaults to OnRuntimeDeleted</p>
-</td>
-</tr>
-<tr>
-<td>
-<code>resources</code></br>
-<em>
-<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#resourcerequirements-v1-core">
-Kubernetes core/v1.ResourceRequirements
-</a>
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>Resources contains the resource requirements and limits for the Vineyard Fuse.
-Default is not set.</p>
-</td>
-</tr>
-<tr>
-<td>
-<code>networkMode</code></br>
-<em>
-<a href="#data.fluid.io/v1alpha1.NetworkMode">
-NetworkMode
-</a>
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>Whether to use hostnetwork or not
-Default is HostNetwork</p>
-</td>
-</tr>
-<tr>
-<td>
-<code>podMetadata</code></br>
-<em>
-<a href="#data.fluid.io/v1alpha1.PodMetadata">
-PodMetadata
-</a>
-</em>
-</td>
-<td>
-<em>(Optional)</em>
-<p>PodMetadata defines labels and annotations that will be propagated to Vineyard&rsquo;s pods.</p>
-</td>
-</tr>
-</tbody>
-</table>
 <h3 id="data.fluid.io/v1alpha1.VolumeSource">VolumeSource
 </h3>
 <p>
diff --git a/go.mod b/go.mod
index a0221bfb..186550a2 100644
--- a/go.mod
+++ b/go.mod
@@ -73,7 +73,7 @@ require (
 	github.com/stretchr/testify v1.8.4
 	go.uber.org/zap v1.24.0
 	golang.org/x/net v0.25.0
-	golang.org/x/time v0.3.0
+	golang.org/x/time v0.5.0
 	google.golang.org/grpc v1.64.0
 	gopkg.in/yaml.v2 v2.4.0
 	gopkg.in/yaml.v3 v3.0.1
diff --git a/go.sum b/go.sum
index 1850a041..3fc67646 100644
--- a/go.sum
+++ b/go.sum
@@ -1447,8 +1447,9 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
 golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
diff --git a/pkg/controllers/runtime_controller.go b/pkg/controllers/runtime_controller.go
index 5ec91d58..41ce3944 100644
--- a/pkg/controllers/runtime_controller.go
+++ b/pkg/controllers/runtime_controller.go
@@ -295,12 +295,12 @@ func (r *RuntimeReconciler) AddFinalizerAndRequeue(ctx cruntime.ReconcileRequest
 	prevGeneration := objectMeta.GetGeneration()
 	objectMeta.SetFinalizers(append(objectMeta.GetFinalizers(), finalizerName))
 	if err := r.Update(ctx, ctx.Runtime); err != nil {
-		ctx.Log.Error(err, "Failed to add finalizer", "StatusUpdateError", ctx)
+		ctx.Log.Error(err, "Failed to add finalizer", "Runtime", ctx.Runtime)
 		return utils.RequeueIfError(err)
 	}
 	// controllerutil.AddFinalizer(ctx.Runtime, finalizer)
 	currentGeneration := objectMeta.GetGeneration()
-	ctx.Log.Info("RequeueImmediatelyUnlessGenerationChanged", "prevGeneration", prevGeneration,
+	ctx.Log.V(1).Info("RequeueImmediatelyUnlessGenerationChanged", "prevGeneration", prevGeneration,
 		"currentGeneration", currentGeneration)
 
 	return utils.RequeueImmediatelyUnlessGenerationChanged(prevGeneration, currentGeneration)
diff --git a/pkg/controllers/v1alpha1/databackup/status_handler.go b/pkg/controllers/v1alpha1/databackup/status_handler.go
index 5a720015..9befa5e1 100644
--- a/pkg/controllers/v1alpha1/databackup/status_handler.go
+++ b/pkg/controllers/v1alpha1/databackup/status_handler.go
@@ -53,8 +53,9 @@ func (o *OnceHandler) GetOperationStatus(ctx runtime.ReconcileRequestContext, op
 	if !kubeclient.IsFinishedPod(backupPod) {
 		return
 	}
+
 	// set the node labels in status when job finished
-	if result.NodeAffinity == nil {
+	if dataflow.Enabled(dataflow.DataflowAffinity) && result.NodeAffinity == nil {
 		// generate the node labels
 		result.NodeAffinity, err = dataflow.GenerateNodeAffinity(ctx.Client, backupPod)
 		if err != nil {
diff --git a/pkg/controllers/v1alpha1/dataload/status_handler.go b/pkg/controllers/v1alpha1/dataload/status_handler.go
index cbd0f8cd..ca408d61 100644
--- a/pkg/controllers/v1alpha1/dataload/status_handler.go
+++ b/pkg/controllers/v1alpha1/dataload/status_handler.go
@@ -81,7 +81,7 @@ func (r *OnceStatusHandler) GetOperationStatus(ctx cruntime.ReconcileRequestCont
 	}
 
 	// set the node labels in status when job finished
-	if result.NodeAffinity == nil {
+	if dataflow.Enabled(dataflow.DataflowAffinity) && result.NodeAffinity == nil {
 		jobPod, err := kubeclient.GetSucceedPodForJob(r.Client, job)
 		if err != nil {
 			ctx.Log.Error(err, "can't get pod for job", "namespace", ctx.Namespace, "jobName", jobName)
diff --git a/pkg/controllers/v1alpha1/datamigrate/status_handler.go b/pkg/controllers/v1alpha1/datamigrate/status_handler.go
index c501d609..f0d83f7b 100644
--- a/pkg/controllers/v1alpha1/datamigrate/status_handler.go
+++ b/pkg/controllers/v1alpha1/datamigrate/status_handler.go
@@ -91,7 +91,7 @@ func (m *OnceStatusHandler) GetOperationStatus(ctx cruntime.ReconcileRequestCont
 	// for parallel migrate, there are multiple pods, so can not set the node labels.
 	if m.dataMigrate.Spec.Parallelism == 1 {
 		// set the node labels in status
-		if result.NodeAffinity == nil {
+		if dataflow.Enabled(dataflow.DataflowAffinity) && result.NodeAffinity == nil {
 			jobPod, err := kubeclient.GetSucceedPodForJob(m.Client, job)
 			if err != nil {
 				ctx.Log.Error(err, "can't get pod for job", "namespace", ctx.Namespace, "jobName", jobName)
diff --git a/pkg/controllers/v1alpha1/dataprocess/status_handler.go b/pkg/controllers/v1alpha1/dataprocess/status_handler.go
index d2d00ce5..4659270d 100644
--- a/pkg/controllers/v1alpha1/dataprocess/status_handler.go
+++ b/pkg/controllers/v1alpha1/dataprocess/status_handler.go
@@ -70,7 +70,7 @@ func (handler *OnceStatusHandler) GetOperationStatus(ctx runtime.ReconcileReques
 	}
 
 	// set the node labels in status when job finished
-	if result.NodeAffinity == nil {
+	if dataflow.Enabled(dataflow.DataflowAffinity) && result.NodeAffinity == nil {
 		jobPod, err := kubeclient.GetSucceedPodForJob(handler.Client, job)
 		if err != nil {
 			ctx.Log.Error(err, "can't get pod for job", "namespace", ctx.Namespace, "jobName", jobName)
diff --git a/pkg/dataflow/affinity.go b/pkg/dataflow/affinity.go
index a8e080b7..4d4d91c4 100644
--- a/pkg/dataflow/affinity.go
+++ b/pkg/dataflow/affinity.go
@@ -28,6 +28,10 @@ import (
 
 // InjectAffinityByRunAfterOp inject the affinity based on preceding operation
 func InjectAffinityByRunAfterOp(c client.Client, runAfter *datav1alpha1.OperationRef, opNamespace string, currentAffinity *v1.Affinity) (*v1.Affinity, error) {
+	if !Enabled(DataflowAffinity) {
+		return currentAffinity, nil
+	}
+
 	// no previous operation or use default affinity strategy, no need to generate node affinity
 	if runAfter == nil || runAfter.AffinityStrategy.Policy == datav1alpha1.DefaultAffinityStrategy {
 		return currentAffinity, nil
diff --git a/pkg/dataflow/features.go b/pkg/dataflow/features.go
new file mode 100644
index 00000000..4c65ca4c
--- /dev/null
+++ b/pkg/dataflow/features.go
@@ -0,0 +1,44 @@
+/*
+Copyright 2024 The Fluid Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package dataflow
+
+import (
+	utilfeature "github.com/fluid-cloudnative/fluid/pkg/utils/feature"
+	"k8s.io/apimachinery/pkg/util/runtime"
+	"k8s.io/component-base/featuregate"
+)
+
+const (
+	// DataflowAffinity Enable affinity inheritance for dataflow operations.
+	DataflowAffinity featuregate.Feature = "DataflowAffinity"
+)
+
+// defaultFeatureGates consists of all known fluid-specific feature keys.
+// To add a new feature, define a key for it above and add it here.
+var defaultFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
+	DataflowAffinity: {Default: false, PreRelease: featuregate.Alpha},
+}
+
+func init() {
+	// register the feature gates and its default value.
+	runtime.Must(utilfeature.DefaultMutableFeatureGate.Add(defaultFeatureGates))
+}
+
+// Enabled is helper for `utilfeature.DefaultFeatureGate.Enabled()`
+func Enabled(f featuregate.Feature) bool {
+	return utilfeature.DefaultFeatureGate.Enabled(f)
+}
diff --git a/pkg/ddc/alluxio/data_migrate.go b/pkg/ddc/alluxio/data_migrate.go
deleted file mode 100644
index e730a905..00000000
--- a/pkg/ddc/alluxio/data_migrate.go
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-  Copyright 2023 The Fluid Authors.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-*/
-
-package alluxio
-
-import (
-	"fmt"
-
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-func (e *AlluxioEngine) CreateDataMigrateJob(ctx cruntime.ReconcileRequestContext, targetDataMigrate datav1alpha1.DataMigrate) error {
-	// TODO implement me
-	return fmt.Errorf("not implemented yet")
-}
diff --git a/pkg/ddc/alluxio/load_data.go b/pkg/ddc/alluxio/load_data.go
index 807507ed..77a87084 100644
--- a/pkg/ddc/alluxio/load_data.go
+++ b/pkg/ddc/alluxio/load_data.go
@@ -34,43 +34,8 @@ import (
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/docker"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
 )
 
-// CreateDataLoadJob creates the job to load data
-func (e *AlluxioEngine) CreateDataLoadJob(ctx cruntime.ReconcileRequestContext, targetDataload datav1alpha1.DataLoad) (err error) {
-	log := ctx.Log.WithName("createDataLoadJob")
-
-	// 1. Check if the helm release already exists
-	releaseName := utils.GetDataLoadReleaseName(targetDataload.Name)
-	jobName := utils.GetDataLoadJobName(releaseName)
-	var existed bool
-	existed, err = helm.CheckRelease(releaseName, targetDataload.Namespace)
-	if err != nil {
-		log.Error(err, "failed to check if release exists", "releaseName", releaseName, "namespace", targetDataload.Namespace)
-		return err
-	}
-
-	// 2. install the helm chart if not exists
-	if !existed {
-		log.Info("DataLoad job helm chart not installed yet, will install")
-		valueFileName, err := e.generateDataLoadValueFile(ctx, &targetDataload)
-		if err != nil {
-			log.Error(err, "failed to generate dataload chart's value file")
-			return err
-		}
-		chartName := utils.GetChartsDirectory() + "/" + cdataload.DataloadChart + "/" + common.AlluxioRuntime
-		err = helm.InstallRelease(releaseName, targetDataload.Namespace, valueFileName, chartName)
-		if err != nil {
-			log.Error(err, "failed to install dataload chart")
-			return err
-		}
-		log.Info("DataLoad job helm chart successfully installed", "namespace", targetDataload.Namespace, "releaseName", releaseName)
-		ctx.Recorder.Eventf(&targetDataload, v1.EventTypeNormal, common.DataLoadJobStarted, "The DataLoad job %s started", jobName)
-	}
-	return err
-}
-
 // generateDataLoadValueFile builds a DataLoadValue by extracted specifications from the given DataLoad, and
 // marshals the DataLoadValue to a temporary yaml file where stores values that'll be used by fluid dataloader helm chart
 func (e *AlluxioEngine) generateDataLoadValueFile(r cruntime.ReconcileRequestContext, object client.Object) (valueFileName string, err error) {
diff --git a/pkg/ddc/alluxio/types.go b/pkg/ddc/alluxio/types.go
index 254d8c74..076f14dd 100644
--- a/pkg/ddc/alluxio/types.go
+++ b/pkg/ddc/alluxio/types.go
@@ -1,5 +1,5 @@
 /*
-Copyright 2023 The Fluid Author.
+Copyright 2020 The Fluid Author.
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff --git a/pkg/ddc/base/engine.go b/pkg/ddc/base/engine.go
index 1df253dc..c817dd9a 100644
--- a/pkg/ddc/base/engine.go
+++ b/pkg/ddc/base/engine.go
@@ -46,14 +46,6 @@ type Engine interface {
 	// Sync syncs the alluxio runtime
 	Sync(ctx cruntime.ReconcileRequestContext) error
 
-	// Dataloader
-	// @Deprecated use DataOperator instead.
-	Dataloader
-
-	// Datamigrater
-	// @Deprecated use DataOperator instead.
-	Datamigrater
-
 	// DataOperator is a common interface for Data Operations like DataBackup/DataLoad/DataMigrate etc.
 	DataOperator
 }
@@ -63,36 +55,18 @@ type DataOperator interface {
 	Operate(ctx cruntime.ReconcileRequestContext, opStatus *datav1alpha1.OperationStatus, operation dataoperation.OperationInterface) (ctrl.Result, error)
 }
 
-// DataOperatorYamlGenerator is the implementation of DataOperator interface for runtime engine
+// DataOperatorYamlGenerator is the implementation of DataOperator interface for runtime engine using TemplateEngine.
 type DataOperatorYamlGenerator interface {
 	GetDataOperationValueFile(ctx cruntime.ReconcileRequestContext, operation dataoperation.OperationInterface) (valueFileName string, err error)
 }
 
-type Dataloader interface {
-	// LoadData generate dataload values and install helm chart
-	LoadData(ctx cruntime.ReconcileRequestContext, targetDataload datav1alpha1.DataLoad) (err error)
-
-	// CheckRuntimeReady Check if runtime is ready
-	// @Deprecated because it's common for all engine
-	CheckRuntimeReady() (ready bool)
-}
-
-type Databackuper interface {
-	BackupData(ctx cruntime.ReconcileRequestContext, targetDataBackup datav1alpha1.DataBackup) (ctrl.Result, error)
-}
-
-type Datamigrater interface {
-	// MigrateData generate datamigrate values and install helm chart
-	MigrateData(ctx cruntime.ReconcileRequestContext, targetDataMigrate datav1alpha1.DataMigrate) (err error)
-}
-
 // Implement is what the real engine should implement if it use the TemplateEngine
 type Implement interface {
 	UnderFileSystemService
 
 	DataOperatorYamlGenerator
 
-	// ShouldSetupMaster checks if the master ready
+	// CheckMasterReady checks if the master ready
 	CheckMasterReady() (ready bool, err error)
 
 	// CheckWorkersReady checks if the workers ready
@@ -155,21 +129,13 @@ type Implement interface {
 	// BindToDataset binds the engine to dataset
 	BindToDataset() (err error)
 
-	// CreateDataLoadJob creates the job to load data
-	// @Deprecated TODO: remove when DataOperator ready
-	CreateDataLoadJob(ctx cruntime.ReconcileRequestContext, targetDataload datav1alpha1.DataLoad) error
-
-	// CreateDataMigrateJob creates the job to load data
-	// @Deprecated TODO: remove when DataOperator ready
-	CreateDataMigrateJob(ctx cruntime.ReconcileRequestContext, targetDataMigrate datav1alpha1.DataMigrate) error
-
-	// checks if the runtime is ready
+	// CheckRuntimeReady checks if the runtime is ready
 	CheckRuntimeReady() (ready bool)
 
 	// SyncRuntime syncs the runtime spec
 	SyncRuntime(ctx cruntime.ReconcileRequestContext) (changed bool, err error)
 
-	// Sync the scheduleInfo to cacheNodes
+	// SyncScheduleInfoToCacheNodes Sync the scheduleInfo to cacheNodes
 	SyncScheduleInfoToCacheNodes() (err error)
 }
 
diff --git a/pkg/ddc/base/load_data.go b/pkg/ddc/base/load_data.go
deleted file mode 100644
index a89deb50..00000000
--- a/pkg/ddc/base/load_data.go
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-Copyright 2022 The Fluid Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-    http://www.apache.org/licenses/LICENSE-2.0
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package base
-
-import (
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-func (t *TemplateEngine) LoadData(ctx cruntime.ReconcileRequestContext, targetDataload datav1alpha1.DataLoad) (err error) {
-	if err = t.Implement.CreateDataLoadJob(ctx, targetDataload); err != nil {
-		t.Log.Error(err, "Failed to create the DataLoad job.")
-		return err
-	}
-	return err
-}
-
-func (t *TemplateEngine) CheckRuntimeReady() (ready bool) {
-	ready = t.Implement.CheckRuntimeReady()
-	return ready
-}
diff --git a/pkg/ddc/base/migrate_data.go b/pkg/ddc/base/migrate_data.go
deleted file mode 100644
index ff00943d..00000000
--- a/pkg/ddc/base/migrate_data.go
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-  Copyright 2023 The Fluid Authors.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-*/
-
-package base
-
-import (
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-func (t *TemplateEngine) MigrateData(ctx cruntime.ReconcileRequestContext, targetDataMigrate datav1alpha1.DataMigrate) (err error) {
-	if err = t.Implement.CreateDataMigrateJob(ctx, targetDataMigrate); err != nil {
-		t.Log.Error(err, "Failed to create the DataMigrate job.")
-		return err
-	}
-	return err
-}
diff --git a/pkg/ddc/base/mock/mock_engine.go b/pkg/ddc/base/mock/mock_engine.go
index a1671677..cc64b9de 100644
--- a/pkg/ddc/base/mock/mock_engine.go
+++ b/pkg/ddc/base/mock/mock_engine.go
@@ -40,13 +40,6 @@ type MockEngine struct {
 	recorder *MockEngineMockRecorder
 }
 
-func (m *MockEngine) MigrateData(ctx runtime.ReconcileRequestContext, targetDataMigrate v1alpha1.DataMigrate) (err error) {
-	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "MigrateData", ctx, targetDataMigrate)
-	ret0, _ := ret[0].(error)
-	return ret0
-}
-
 func (m *MockEngine) Operate(ctx runtime.ReconcileRequestContext, opStatus *v1alpha1.OperationStatus, operation dataoperation.OperationInterface) (ctrl.Result, error) {
 	m.ctrl.T.Helper()
 	ret := m.ctrl.Call(m, "Operate", ctx, opStatus, operation)
@@ -143,20 +136,6 @@ func (mr *MockEngineMockRecorder) ID() *gomock.Call {
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ID", reflect.TypeOf((*MockEngine)(nil).ID))
 }
 
-// LoadData mocks base method.
-func (m *MockEngine) LoadData(ctx runtime.ReconcileRequestContext, targetDataload v1alpha1.DataLoad) error {
-	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "LoadData", ctx, targetDataload)
-	ret0, _ := ret[0].(error)
-	return ret0
-}
-
-// LoadData indicates an expected call of LoadData.
-func (mr *MockEngineMockRecorder) LoadData(ctx, targetDataload interface{}) *gomock.Call {
-	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LoadData", reflect.TypeOf((*MockEngine)(nil).LoadData), ctx, targetDataload)
-}
-
 // Setup mocks base method.
 func (m *MockEngine) Setup(ctx runtime.ReconcileRequestContext) (bool, error) {
 	m.ctrl.T.Helper()
@@ -252,20 +231,6 @@ func (mr *MockDataloaderMockRecorder) CheckRuntimeReady() *gomock.Call {
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CheckRuntimeReady", reflect.TypeOf((*MockDataloader)(nil).CheckRuntimeReady))
 }
 
-// LoadData mocks base method.
-func (m *MockDataloader) LoadData(ctx runtime.ReconcileRequestContext, targetDataload v1alpha1.DataLoad) error {
-	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "LoadData", ctx, targetDataload)
-	ret0, _ := ret[0].(error)
-	return ret0
-}
-
-// LoadData indicates an expected call of LoadData.
-func (mr *MockDataloaderMockRecorder) LoadData(ctx, targetDataload interface{}) *gomock.Call {
-	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LoadData", reflect.TypeOf((*MockDataloader)(nil).LoadData), ctx, targetDataload)
-}
-
 // MockImplement is a mock of implement interface.
 type MockImplement struct {
 	ctrl     *gomock.Controller
@@ -414,27 +379,6 @@ func (m *MockImplement) GetDataOperationValueFile(ctx runtime.ReconcileRequestCo
 	return ret0, ret1
 }
 
-// CreateDataLoadJob mocks base method.
-func (m *MockImplement) CreateDataLoadJob(ctx runtime.ReconcileRequestContext, targetDataload v1alpha1.DataLoad) error {
-	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "CreateDataLoadJob", ctx, targetDataload)
-	ret0, _ := ret[0].(error)
-	return ret0
-}
-
-func (m *MockImplement) CreateDataMigrateJob(ctx runtime.ReconcileRequestContext, targetDataMigrate v1alpha1.DataMigrate) error {
-	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "CreateDataMigrateJob", ctx, targetDataMigrate)
-	ret0, _ := ret[0].(error)
-	return ret0
-}
-
-// CreateDataLoadJob indicates an expected call of CreateDataLoadJob.
-func (mr *MockImplementMockRecorder) CreateDataLoadJob(ctx, targetDataload interface{}) *gomock.Call {
-	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateDataLoadJob", reflect.TypeOf((*MockImplement)(nil).CreateDataLoadJob), ctx, targetDataload)
-}
-
 // CreateVolume mocks base method.
 func (m *MockImplement) CreateVolume() error {
 	m.ctrl.T.Helper()
diff --git a/pkg/ddc/base/operation.go b/pkg/ddc/base/operation.go
index 81317f8e..2a84b068 100644
--- a/pkg/ddc/base/operation.go
+++ b/pkg/ddc/base/operation.go
@@ -37,21 +37,8 @@ const cleanupErrorMsg = "Failed to get remaining time to clean up for operation
 
 func (t *TemplateEngine) Operate(ctx cruntime.ReconcileRequestContext, opStatus *datav1alpha1.OperationStatus,
 	operation dataoperation.OperationInterface) (ctrl.Result, error) {
-	operateType := operation.GetOperationType()
-	object := operation.GetOperationObject()
-
-	// runtime engine override the template engine
-	switch operateType {
-	case datav1alpha1.DataBackupType:
-		ownImpl, ok := t.Implement.(Databackuper)
-		if ok {
-			targetDataBackup, success := object.(*datav1alpha1.DataBackup)
-			if !success {
-				return utils.RequeueIfError(fmt.Errorf("object %v is not a DataBackup", object))
-			}
-			return ownImpl.BackupData(ctx, *targetDataBackup)
-		}
-	}
+
+	// we can do customized runtime engine override the template engine, implement if needed.
 
 	// use default template engine
 	switch opStatus.Phase {
diff --git a/pkg/ddc/base/operation_lock.go b/pkg/ddc/base/operation_lock.go
index 883174ae..80c49baf 100644
--- a/pkg/ddc/base/operation_lock.go
+++ b/pkg/ddc/base/operation_lock.go
@@ -32,12 +32,12 @@ import (
 	"github.com/fluid-cloudnative/fluid/pkg/utils"
 )
 
-func GetDataOperationKey(object client.Object) string {
+func getDataOperationKey(object client.Object) string {
 	return object.GetName()
 }
 
 // SetDataOperationInTargetDataset set status of target dataset to mark the data operation being performed.
-func SetDataOperationInTargetDataset(ctx cruntime.ReconcileRequestContext, operation dataoperation.OperationInterface, engine Engine) error {
+func SetDataOperationInTargetDataset(ctx cruntime.ReconcileRequestContext, operation dataoperation.OperationInterface, engine *TemplateEngine) error {
 	targetDataset := ctx.Dataset
 	object := operation.GetOperationObject()
 
@@ -53,7 +53,7 @@ func SetDataOperationInTargetDataset(ctx cruntime.ReconcileRequestContext, opera
 	}
 
 	operationTypeName := string(operation.GetOperationType())
-	dataOpKey := GetDataOperationKey(object)
+	dataOpKey := getDataOperationKey(object)
 
 	// set current data operation in target dataset
 	err := retry.RetryOnConflict(retry.DefaultBackoff, func() error {
@@ -85,7 +85,7 @@ func SetDataOperationInTargetDataset(ctx cruntime.ReconcileRequestContext, opera
 // ReleaseTargetDataset release target dataset OperationRef field which marks the data operation being performed.
 func ReleaseTargetDataset(ctx cruntime.ReconcileRequestContext, operation dataoperation.OperationInterface) error {
 
-	dataOpKey := GetDataOperationKey(operation.GetOperationObject())
+	dataOpKey := getDataOperationKey(operation.GetOperationObject())
 	operationTypeName := string(operation.GetOperationType())
 
 	err := retry.RetryOnConflict(retry.DefaultBackoff, func() error {
diff --git a/pkg/ddc/base/volume.go b/pkg/ddc/base/volume.go
index 2480450a..621a3a41 100644
--- a/pkg/ddc/base/volume.go
+++ b/pkg/ddc/base/volume.go
@@ -1,5 +1,5 @@
 /*
-Copyright 2022 The Fluid Authors.
+Copyright 2020 The Fluid Authors.
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff --git a/pkg/ddc/efc/data_load.go b/pkg/ddc/efc/data_load.go
index 200cb4ec..c6cc7265 100644
--- a/pkg/ddc/efc/data_load.go
+++ b/pkg/ddc/efc/data_load.go
@@ -17,51 +17,10 @@
 package efc
 
 import (
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	"github.com/fluid-cloudnative/fluid/pkg/common"
-	cdataload "github.com/fluid-cloudnative/fluid/pkg/dataload"
 	"github.com/fluid-cloudnative/fluid/pkg/ddc/efc/operations"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-	"github.com/fluid-cloudnative/fluid/pkg/utils"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
-	v1 "k8s.io/api/core/v1"
 	podutil "k8s.io/kubernetes/pkg/api/v1/pod"
 )
 
-// CreateDataLoadJob creates the job to load data
-func (e *EFCEngine) CreateDataLoadJob(ctx cruntime.ReconcileRequestContext, targetDataload datav1alpha1.DataLoad) (err error) {
-	log := ctx.Log.WithName("createDataLoadJob")
-
-	// 1. Check if the helm release already exists
-	releaseName := utils.GetDataLoadReleaseName(targetDataload.Name)
-	jobName := utils.GetDataLoadJobName(releaseName)
-	var existed bool
-	existed, err = helm.CheckRelease(releaseName, targetDataload.Namespace)
-	if err != nil {
-		log.Error(err, "failed to check if release exists", "releaseName", releaseName, "namespace", targetDataload.Namespace)
-		return err
-	}
-
-	// 2. install the helm chart if not exists
-	if !existed {
-		log.Info("DataLoad job helm chart not installed yet, will install")
-		valueFileName, err := e.generateDataLoadValueFile(ctx, targetDataload)
-		if err != nil {
-			log.Error(err, "failed to generate dataload chart's value file")
-			return err
-		}
-		chartName := utils.GetChartsDirectory() + "/" + cdataload.DataloadChart + "/" + common.EFCRuntime
-		err = helm.InstallRelease(releaseName, targetDataload.Namespace, valueFileName, chartName)
-		if err != nil {
-			log.Error(err, "failed to install dataload chart")
-			return err
-		}
-		log.Info("DataLoad job helm chart successfully installed", "namespace", targetDataload.Namespace, "releaseName", releaseName)
-		ctx.Recorder.Eventf(&targetDataload, v1.EventTypeNormal, common.DataLoadJobStarted, "The DataLoad job %s started", jobName)
-	}
-	return err
-}
-
 // CheckRuntimeReady checks if runtime is ready or not
 func (e *EFCEngine) CheckRuntimeReady() (ready bool) {
 	// 1. check master ready
@@ -88,10 +47,3 @@ func (e *EFCEngine) CheckRuntimeReady() (ready bool) {
 	}
 	return readyCount > 0
 }
-
-// generateDataLoadValueFile builds a DataLoadValue by extracted specifications from the given DataLoad, and
-// marshals the DataLoadValue to a temporary yaml file where stores values that'll be used by fluid dataloader helm chart
-func (e *EFCEngine) generateDataLoadValueFile(r cruntime.ReconcileRequestContext, dataload datav1alpha1.DataLoad) (valueFileName string, err error) {
-	// TODO: generate dataload value file
-	return "", nil
-}
diff --git a/pkg/ddc/efc/data_migrate.go b/pkg/ddc/efc/data_migrate.go
deleted file mode 100644
index afcd266c..00000000
--- a/pkg/ddc/efc/data_migrate.go
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-  Copyright 2023 The Fluid Authors.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-*/
-
-package efc
-
-import (
-	"fmt"
-
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-func (e *EFCEngine) CreateDataMigrateJob(ctx cruntime.ReconcileRequestContext, targetDataMigrate datav1alpha1.DataMigrate) error {
-	// TODO implement me
-	return fmt.Errorf("not implemented yet")
-}
diff --git a/pkg/ddc/goosefs/data_migrate.go b/pkg/ddc/goosefs/data_migrate.go
deleted file mode 100644
index 628e372e..00000000
--- a/pkg/ddc/goosefs/data_migrate.go
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-  Copyright 2023 The Fluid Authors.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-*/
-
-package goosefs
-
-import (
-	"fmt"
-
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-func (e *GooseFSEngine) CreateDataMigrateJob(ctx cruntime.ReconcileRequestContext, targetDataMigrate datav1alpha1.DataMigrate) error {
-	// TODO implement me
-	return fmt.Errorf("not implemented yet")
-}
diff --git a/pkg/ddc/goosefs/load_data.go b/pkg/ddc/goosefs/load_data.go
index 3f70c390..b363bfb1 100644
--- a/pkg/ddc/goosefs/load_data.go
+++ b/pkg/ddc/goosefs/load_data.go
@@ -32,43 +32,8 @@ import (
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/docker"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
 )
 
-// CreateDataLoadJob creates the job to load data
-func (e *GooseFSEngine) CreateDataLoadJob(ctx cruntime.ReconcileRequestContext, targetDataload datav1alpha1.DataLoad) (err error) {
-	log := ctx.Log.WithName("createDataLoadJob")
-
-	// 1. Check if the helm release already exists
-	releaseName := utils.GetDataLoadReleaseName(targetDataload.Name)
-	jobName := utils.GetDataLoadJobName(releaseName)
-	var existed bool
-	existed, err = helm.CheckRelease(releaseName, targetDataload.Namespace)
-	if err != nil {
-		log.Error(err, "failed to check if release exists", "releaseName", releaseName, "namespace", targetDataload.Namespace)
-		return err
-	}
-
-	// 2. install the helm chart if not exists
-	if !existed {
-		log.Info("DataLoad job helm chart not installed yet, will install")
-		valueFileName, err := e.generateDataLoadValueFile(ctx, &targetDataload)
-		if err != nil {
-			log.Error(err, "failed to generate dataload chart's value file")
-			return err
-		}
-		chartName := utils.GetChartsDirectory() + "/" + cdataload.DataloadChart + "/" + common.GooseFSRuntime
-		err = helm.InstallRelease(releaseName, targetDataload.Namespace, valueFileName, chartName)
-		if err != nil {
-			log.Error(err, "failed to install dataload chart")
-			return err
-		}
-		log.Info("DataLoad job helm chart successfully installed", "namespace", targetDataload.Namespace, "releaseName", releaseName)
-		ctx.Recorder.Eventf(&targetDataload, v1.EventTypeNormal, common.DataLoadJobStarted, "The DataLoad job %s started", jobName)
-	}
-	return err
-}
-
 // generateDataLoadValueFile builds a DataLoadValue by extracted specifications from the given DataLoad, and
 // marshals the DataLoadValue to a temporary yaml file where stores values that'll be used by fluid dataloader helm chart
 func (e *GooseFSEngine) generateDataLoadValueFile(r cruntime.ReconcileRequestContext, object client.Object) (valueFileName string, err error) {
diff --git a/pkg/ddc/jindo/data_migrate.go b/pkg/ddc/jindo/data_migrate.go
deleted file mode 100644
index 003ef57d..00000000
--- a/pkg/ddc/jindo/data_migrate.go
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-  Copyright 2023 The Fluid Authors.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-*/
-
-package jindo
-
-import (
-	"fmt"
-
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-func (e *JindoEngine) CreateDataMigrateJob(ctx cruntime.ReconcileRequestContext, targetDataMigrate datav1alpha1.DataMigrate) error {
-	// TODO implement me
-	return fmt.Errorf("not implemented yet")
-}
diff --git a/pkg/ddc/jindo/load_data.go b/pkg/ddc/jindo/load_data.go
index b2793f6f..2ee7fc7f 100644
--- a/pkg/ddc/jindo/load_data.go
+++ b/pkg/ddc/jindo/load_data.go
@@ -34,44 +34,9 @@ import (
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/docker"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
 	jindoutils "github.com/fluid-cloudnative/fluid/pkg/utils/jindo"
 )
 
-// CreateDataLoadJob creates the job to load data
-func (e *JindoEngine) CreateDataLoadJob(ctx cruntime.ReconcileRequestContext, targetDataload datav1alpha1.DataLoad) (err error) {
-	log := ctx.Log.WithName("createDataLoadJob")
-
-	// 1. Check if the helm release already exists
-	releaseName := utils.GetDataLoadReleaseName(targetDataload.Name)
-	jobName := utils.GetDataLoadJobName(releaseName)
-	var existed bool
-	existed, err = helm.CheckRelease(releaseName, targetDataload.Namespace)
-	if err != nil {
-		log.Error(err, "failed to check if release exists", "releaseName", releaseName, "namespace", targetDataload.Namespace)
-		return err
-	}
-
-	// 2. install the helm chart if not exists
-	if !existed {
-		log.Info("DataLoad job helm chart not installed yet, will install")
-		valueFileName, err := e.generateDataLoadValueFile(ctx, &targetDataload)
-		if err != nil {
-			log.Error(err, "failed to generate dataload chart's value file")
-			return err
-		}
-		chartName := utils.GetChartsDirectory() + "/" + cdataload.DataloadChart + "/" + common.JindoRuntime
-		err = helm.InstallRelease(releaseName, targetDataload.Namespace, valueFileName, chartName)
-		if err != nil {
-			log.Error(err, "failed to install dataload chart")
-			return err
-		}
-		log.Info("DataLoad job helm chart successfully installed", "namespace", targetDataload.Namespace, "releaseName", releaseName)
-		ctx.Recorder.Eventf(&targetDataload, v1.EventTypeNormal, common.DataLoadJobStarted, "The DataLoad job %s started", jobName)
-	}
-	return err
-}
-
 // generateDataLoadValueFile builds a DataLoadValue by extracted specifications from the given DataLoad, and
 // marshals the DataLoadValue to a temporary yaml file where stores values that'll be used by fluid dataloader helm chart
 func (e *JindoEngine) generateDataLoadValueFile(r cruntime.ReconcileRequestContext, object client.Object) (valueFileName string, err error) {
diff --git a/pkg/ddc/jindocache/const.go b/pkg/ddc/jindocache/const.go
index 659e1409..3de01ef2 100644
--- a/pkg/ddc/jindocache/const.go
+++ b/pkg/ddc/jindocache/const.go
@@ -52,9 +52,7 @@ const (
 
 	jindoFuseMountpath = "/jfs/jindofs-fuse"
 
-	defaultJindofsxRuntimeImage = "registry.cn-shanghai.aliyuncs.com/jindofs/smartdata:6.2.0"
-
-	engineType = "jindocache"
+	defaultJindofsxRuntimeImage = "registry.cn-shanghai.aliyuncs.com/jindofs/smartdata:6.4.0"
 
 	FuseOnly = "fuseOnly"
 
diff --git a/pkg/ddc/jindocache/data_migrate.go b/pkg/ddc/jindocache/data_migrate.go
deleted file mode 100644
index e3bffeba..00000000
--- a/pkg/ddc/jindocache/data_migrate.go
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-  Copyright 2023 The Fluid Authors.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-*/
-
-package jindocache
-
-import (
-	"fmt"
-
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-func (e *JindoCacheEngine) CreateDataMigrateJob(ctx cruntime.ReconcileRequestContext, targetDataMigrate datav1alpha1.DataMigrate) error {
-	// TODO implement me
-	return fmt.Errorf("not implemented yet")
-}
diff --git a/pkg/ddc/jindocache/load_data.go b/pkg/ddc/jindocache/load_data.go
index d2a5fd86..8fd4d09f 100644
--- a/pkg/ddc/jindocache/load_data.go
+++ b/pkg/ddc/jindocache/load_data.go
@@ -34,43 +34,8 @@ import (
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/docker"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
 )
 
-// CreateDataLoadJob creates the job to load data
-func (e *JindoCacheEngine) CreateDataLoadJob(ctx cruntime.ReconcileRequestContext, targetDataload datav1alpha1.DataLoad) (err error) {
-	log := ctx.Log.WithName("createDataLoadJob")
-
-	// 1. Check if the helm release already exists
-	releaseName := utils.GetDataLoadReleaseName(targetDataload.Name)
-	jobName := utils.GetDataLoadJobName(releaseName)
-	var existed bool
-	existed, err = helm.CheckRelease(releaseName, targetDataload.Namespace)
-	if err != nil {
-		log.Error(err, "failed to check if release exists", "releaseName", releaseName, "namespace", targetDataload.Namespace)
-		return err
-	}
-
-	// 2. install the helm chart if not exists
-	if !existed {
-		log.Info("DataLoad job helm chart not installed yet, will install")
-		valueFileName, err := e.generateDataLoadValueFile(ctx, &targetDataload)
-		if err != nil {
-			log.Error(err, "failed to generate dataload chart's value file")
-			return err
-		}
-		chartName := utils.GetChartsDirectory() + "/" + cdataload.DataloadChart + "/" + engineType
-		err = helm.InstallRelease(releaseName, targetDataload.Namespace, valueFileName, chartName)
-		if err != nil {
-			log.Error(err, "failed to install dataload chart")
-			return err
-		}
-		log.Info("DataLoad job helm chart successfully installed", "namespace", targetDataload.Namespace, "releaseName", releaseName)
-		ctx.Recorder.Eventf(&targetDataload, v1.EventTypeNormal, common.DataLoadJobStarted, "The DataLoad job %s started", jobName)
-	}
-	return err
-}
-
 // generateDataLoadValueFile builds a DataLoadValue by extracted specifications from the given DataLoad, and
 // marshals the DataLoadValue to a temporary yaml file where stores values that'll be used by fluid dataloader helm chart
 func (e *JindoCacheEngine) generateDataLoadValueFile(r cruntime.ReconcileRequestContext, object client.Object) (valueFileName string, err error) {
diff --git a/pkg/ddc/jindocache/transform.go b/pkg/ddc/jindocache/transform.go
index 784661b6..1833f94e 100644
--- a/pkg/ddc/jindocache/transform.go
+++ b/pkg/ddc/jindocache/transform.go
@@ -947,7 +947,7 @@ func (e *JindoCacheEngine) getSmartDataConfigs(runtime *datav1alpha1.JindoRuntim
 	// Apply defaults
 	config := smartdataConfig{
 		image:           "registry.cn-shanghai.aliyuncs.com/jindofs/smartdata",
-		imageTag:        "6.2.0",
+		imageTag:        "6.4.0",
 		imagePullPolicy: "Always",
 		dnsServer:       "1.1.1.1",
 	}
@@ -985,7 +985,7 @@ func (e *JindoCacheEngine) getSmartDataConfigs(runtime *datav1alpha1.JindoRuntim
 func (e *JindoCacheEngine) parseFuseImage(runtime *datav1alpha1.JindoRuntime) (image, tag, imagePullPolicy string) {
 	// Apply defaults
 	image = "registry.cn-shanghai.aliyuncs.com/jindofs/jindo-fuse"
-	tag = "6.2.0"
+	tag = "6.4.0"
 	imagePullPolicy = "Always"
 
 	// Override with global-scoped configs
diff --git a/pkg/ddc/jindofsx/const.go b/pkg/ddc/jindofsx/const.go
index 51ac15c9..0f63d864 100644
--- a/pkg/ddc/jindofsx/const.go
+++ b/pkg/ddc/jindofsx/const.go
@@ -54,8 +54,6 @@ const (
 
 	defaultJindofsxRuntimeImage = "registry.cn-shanghai.aliyuncs.com/jindofs/smartdata:4.6.8"
 
-	engineType = "jindofsx"
-
 	FuseOnly = "fuseOnly"
 
 	defaultMemLimit = 100
diff --git a/pkg/ddc/jindofsx/data_migrate.go b/pkg/ddc/jindofsx/data_migrate.go
deleted file mode 100644
index af23fe86..00000000
--- a/pkg/ddc/jindofsx/data_migrate.go
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-  Copyright 2023 The Fluid Authors.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-*/
-
-package jindofsx
-
-import (
-	"fmt"
-
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-func (e *JindoFSxEngine) CreateDataMigrateJob(ctx cruntime.ReconcileRequestContext, targetDataMigrate datav1alpha1.DataMigrate) error {
-	// TODO implement me
-	return fmt.Errorf("not implemented yet")
-}
diff --git a/pkg/ddc/jindofsx/load_data.go b/pkg/ddc/jindofsx/load_data.go
index 5f0e8cd1..bc948b13 100644
--- a/pkg/ddc/jindofsx/load_data.go
+++ b/pkg/ddc/jindofsx/load_data.go
@@ -34,43 +34,8 @@ import (
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/docker"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
 )
 
-// CreateDataLoadJob creates the job to load data
-func (e *JindoFSxEngine) CreateDataLoadJob(ctx cruntime.ReconcileRequestContext, targetDataload datav1alpha1.DataLoad) (err error) {
-	log := ctx.Log.WithName("createDataLoadJob")
-
-	// 1. Check if the helm release already exists
-	releaseName := utils.GetDataLoadReleaseName(targetDataload.Name)
-	jobName := utils.GetDataLoadJobName(releaseName)
-	var existed bool
-	existed, err = helm.CheckRelease(releaseName, targetDataload.Namespace)
-	if err != nil {
-		log.Error(err, "failed to check if release exists", "releaseName", releaseName, "namespace", targetDataload.Namespace)
-		return err
-	}
-
-	// 2. install the helm chart if not exists
-	if !existed {
-		log.Info("DataLoad job helm chart not installed yet, will install")
-		valueFileName, err := e.generateDataLoadValueFile(ctx, &targetDataload)
-		if err != nil {
-			log.Error(err, "failed to generate dataload chart's value file")
-			return err
-		}
-		chartName := utils.GetChartsDirectory() + "/" + cdataload.DataloadChart + "/" + engineType
-		err = helm.InstallRelease(releaseName, targetDataload.Namespace, valueFileName, chartName)
-		if err != nil {
-			log.Error(err, "failed to install dataload chart")
-			return err
-		}
-		log.Info("DataLoad job helm chart successfully installed", "namespace", targetDataload.Namespace, "releaseName", releaseName)
-		ctx.Recorder.Eventf(&targetDataload, v1.EventTypeNormal, common.DataLoadJobStarted, "The DataLoad job %s started", jobName)
-	}
-	return err
-}
-
 // generateDataLoadValueFile builds a DataLoadValue by extracted specifications from the given DataLoad, and
 // marshals the DataLoadValue to a temporary yaml file where stores values that'll be used by fluid dataloader helm chart
 func (e *JindoFSxEngine) generateDataLoadValueFile(r cruntime.ReconcileRequestContext, object client.Object) (valueFileName string, err error) {
diff --git a/pkg/ddc/juicefs/data_load.go b/pkg/ddc/juicefs/data_load.go
index c5f27748..e29f9f9b 100644
--- a/pkg/ddc/juicefs/data_load.go
+++ b/pkg/ddc/juicefs/data_load.go
@@ -35,43 +35,8 @@ import (
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/docker"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
 )
 
-// CreateDataLoadJob creates the job to load data
-func (j *JuiceFSEngine) CreateDataLoadJob(ctx cruntime.ReconcileRequestContext, targetDataload datav1alpha1.DataLoad) (err error) {
-	log := ctx.Log.WithName("createDataLoadJob")
-
-	// 1. Check if the helm release already exists
-	releaseName := utils.GetDataLoadReleaseName(targetDataload.Name)
-	jobName := utils.GetDataLoadJobName(releaseName)
-	var existed bool
-	existed, err = helm.CheckRelease(releaseName, targetDataload.Namespace)
-	if err != nil {
-		log.Error(err, "failed to check if release exists", "releaseName", releaseName, "namespace", targetDataload.Namespace)
-		return err
-	}
-
-	// 2. install the helm chart if not exists
-	if !existed {
-		log.Info("DataLoad job helm chart not installed yet, will install")
-		valueFileName, err := j.generateDataLoadValueFile(ctx, &targetDataload)
-		if err != nil {
-			log.Error(err, "failed to generate dataload chart's value file")
-			return err
-		}
-		chartName := utils.GetChartsDirectory() + "/" + cdataload.DataloadChart + "/" + common.JuiceFSRuntime
-		err = helm.InstallRelease(releaseName, targetDataload.Namespace, valueFileName, chartName)
-		if err != nil {
-			log.Error(err, "failed to install dataload chart")
-			return err
-		}
-		log.Info("DataLoad job helm chart successfully installed", "namespace", targetDataload.Namespace, "releaseName", releaseName)
-		ctx.Recorder.Eventf(&targetDataload, v1.EventTypeNormal, common.DataLoadJobStarted, "The DataLoad job %s started", jobName)
-	}
-	return err
-}
-
 // generateDataLoadValueFile builds a DataLoadValue by extracted specifications from the given DataLoad, and
 // marshals the DataLoadValue to a temporary yaml file where stores values that'll be used by fluid dataloader helm chart
 func (j *JuiceFSEngine) generateDataLoadValueFile(r cruntime.ReconcileRequestContext, object client.Object) (valueFileName string, err error) {
diff --git a/pkg/ddc/juicefs/data_migrate.go b/pkg/ddc/juicefs/data_migrate.go
index e659f589..01e801fc 100644
--- a/pkg/ddc/juicefs/data_migrate.go
+++ b/pkg/ddc/juicefs/data_migrate.go
@@ -39,43 +39,9 @@ import (
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/docker"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/transfromer"
 )
 
-func (j *JuiceFSEngine) CreateDataMigrateJob(ctx cruntime.ReconcileRequestContext, targetDataMigrate datav1alpha1.DataMigrate) (err error) {
-	log := ctx.Log.WithName("createDataMigrateJob")
-
-	// 1. Check if the helm release already exists
-	releaseName := utils.GetDataMigrateReleaseName(targetDataMigrate.Name)
-	jobName := utils.GetDataMigrateJobName(releaseName)
-	var existed bool
-	existed, err = helm.CheckRelease(releaseName, targetDataMigrate.Namespace)
-	if err != nil {
-		log.Error(err, "failed to check if release exists", "releaseName", releaseName, "namespace", targetDataMigrate.Namespace)
-		return err
-	}
-
-	// 2. install the helm chart if not exists
-	if !existed {
-		log.Info("DataMigrate job helm chart not installed yet, will install")
-		valueFileName, err := j.generateDataMigrateValueFile(ctx, &targetDataMigrate)
-		if err != nil {
-			log.Error(err, "failed to generate dataload chart's value file")
-			return err
-		}
-		chartName := utils.GetChartsDirectory() + "/" + cdatamigrate.DataMigrateChart + "/" + common.JuiceFSRuntime
-		err = helm.InstallRelease(releaseName, targetDataMigrate.Namespace, valueFileName, chartName)
-		if err != nil {
-			log.Error(err, "failed to install datamigrate chart")
-			return err
-		}
-		log.Info("DataLoad job helm chart successfully installed", "namespace", targetDataMigrate.Namespace, "releaseName", releaseName)
-		ctx.Recorder.Eventf(&targetDataMigrate, corev1.EventTypeNormal, common.DataLoadJobStarted, "The DataMigrate job(or cronjob) %s started", jobName)
-	}
-	return err
-}
-
 func (j *JuiceFSEngine) generateDataMigrateValueFile(r cruntime.ReconcileRequestContext, object client.Object) (valueFileName string, err error) {
 	dataMigrate, ok := object.(*datav1alpha1.DataMigrate)
 	if !ok {
diff --git a/pkg/ddc/thin/dataload.go b/pkg/ddc/thin/dataload.go
deleted file mode 100644
index 05e5c517..00000000
--- a/pkg/ddc/thin/dataload.go
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-  Copyright 2022 The Fluid Authors.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-*/
-
-package thin
-
-import (
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-func (t ThinEngine) CreateDataLoadJob(ctx cruntime.ReconcileRequestContext, targetDataload datav1alpha1.DataLoad) error {
-	//TODO implement me
-	return nil
-}
-
-func (t ThinEngine) CheckRuntimeReady() (ready bool) {
-	//TODO implement me
-	return true
-}
diff --git a/pkg/ddc/thin/datamigrate.go b/pkg/ddc/thin/datamigrate.go
deleted file mode 100644
index 6b340b3e..00000000
--- a/pkg/ddc/thin/datamigrate.go
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-  Copyright 2023 The Fluid Authors.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-*/
-
-package thin
-
-import (
-	"fmt"
-
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-func (t *ThinEngine) CreateDataMigrateJob(ctx cruntime.ReconcileRequestContext, targetDataMigrate datav1alpha1.DataMigrate) error {
-	//TODO implement me
-	return fmt.Errorf("not implemented yet")
-}
diff --git a/pkg/ddc/thin/referencedataset/dataload.go b/pkg/ddc/thin/referencedataset/dataload.go
deleted file mode 100644
index fea5ddc4..00000000
--- a/pkg/ddc/thin/referencedataset/dataload.go
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-  Copyright 2022 The Fluid Authors.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-*/
-
-package referencedataset
-
-import (
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-func (t *ReferenceDatasetEngine) LoadData(ctx cruntime.ReconcileRequestContext, targetDataload datav1alpha1.DataLoad) (err error) {
-	//TODO implement me
-	return nil
-}
-
-func (t *ReferenceDatasetEngine) CheckRuntimeReady() (ready bool) {
-	//TODO implement me
-	return true
-}
diff --git a/pkg/ddc/thin/referencedataset/datamigrate.go b/pkg/ddc/thin/referencedataset/datamigrate.go
deleted file mode 100644
index 5353bacf..00000000
--- a/pkg/ddc/thin/referencedataset/datamigrate.go
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-  Copyright 2023 The Fluid Authors.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-*/
-
-package referencedataset
-
-import (
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-func (e *ReferenceDatasetEngine) MigrateData(ctx cruntime.ReconcileRequestContext, targetDataMigrate datav1alpha1.DataMigrate) (err error) {
-	//TODO implement me
-	return nil
-}
diff --git a/pkg/ddc/thin/runtime_info.go b/pkg/ddc/thin/runtime_info.go
index c694ee48..718373f4 100644
--- a/pkg/ddc/thin/runtime_info.go
+++ b/pkg/ddc/thin/runtime_info.go
@@ -22,6 +22,11 @@ import (
 	"github.com/fluid-cloudnative/fluid/pkg/utils/dataset/volume"
 )
 
+func (t *ThinEngine) CheckRuntimeReady() (ready bool) {
+	//TODO implement me
+	return true
+}
+
 // getRuntimeInfo gets runtime info
 func (t *ThinEngine) getRuntimeInfo() (base.RuntimeInfoInterface, error) {
 	if t.runtimeInfo == nil {
diff --git a/pkg/ddc/vineyard/const.go b/pkg/ddc/vineyard/const.go
index 962a40c3..18b0550b 100644
--- a/pkg/ddc/vineyard/const.go
+++ b/pkg/ddc/vineyard/const.go
@@ -41,4 +41,17 @@ const (
 	WorkerEtcdPrefix = "etcd.prefix"
 
 	DefaultWorkerEtcdPrefixValue = "/vineyard"
+
+	// the size of vineyardd in vineyard-fuse
+	VineyarddSize = "size"
+
+	// the etcd endpoint of vineyardd in vineyard-fuse
+	EtcdEndpoint = "etcd_endpoint"
+
+	// the etcd prefix of vineyardd in vineyard-fuse
+	EtcdPrefix = "etcd_prefix"
+
+	DefaultSize = "0"
+
+	DefaultEtcdPrefix = "/vineyard"
 )
diff --git a/pkg/ddc/vineyard/data_migrate.go b/pkg/ddc/vineyard/data_migrate.go
deleted file mode 100644
index 81036f03..00000000
--- a/pkg/ddc/vineyard/data_migrate.go
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-Copyright 2024 The Fluid Authors.
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-    http://www.apache.org/licenses/LICENSE-2.0
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package vineyard
-
-import (
-	"fmt"
-
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-func (e *VineyardEngine) CreateDataMigrateJob(ctx cruntime.ReconcileRequestContext, targetDataMigrate datav1alpha1.DataMigrate) error {
-	// TODO implement me
-	return fmt.Errorf("not implemented yet")
-}
diff --git a/pkg/ddc/vineyard/load_data.go b/pkg/ddc/vineyard/load_data.go
deleted file mode 100644
index 2a14f370..00000000
--- a/pkg/ddc/vineyard/load_data.go
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-Copyright 2024 The Fluid Authors.
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-    http://www.apache.org/licenses/LICENSE-2.0
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package vineyard
-
-import (
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-)
-
-// CreateDataLoadJob creates the job to load data
-func (e *VineyardEngine) CreateDataLoadJob(ctx cruntime.ReconcileRequestContext, targetDataload datav1alpha1.DataLoad) (err error) {
-	// TODO:(caoye) implement me
-	return err
-}
-
-func (e *VineyardEngine) CheckRuntimeReady() (ready bool) {
-	// TODO:(caoye) implement me
-	return true
-}
diff --git a/pkg/ddc/vineyard/runtime_info.go b/pkg/ddc/vineyard/runtime_info.go
index 26d2a1b4..61ad9821 100644
--- a/pkg/ddc/vineyard/runtime_info.go
+++ b/pkg/ddc/vineyard/runtime_info.go
@@ -18,6 +18,11 @@ import (
 	"github.com/fluid-cloudnative/fluid/pkg/ddc/base"
 )
 
+func (e *VineyardEngine) CheckRuntimeReady() (ready bool) {
+	//TODO implement me
+	return true
+}
+
 // getRuntimeInfo gets runtime info
 func (e *VineyardEngine) getRuntimeInfo() (base.RuntimeInfoInterface, error) {
 	if e.runtimeInfo == nil {
diff --git a/pkg/ddc/vineyard/transform.go b/pkg/ddc/vineyard/transform.go
index 8c715873..77df3b15 100644
--- a/pkg/ddc/vineyard/transform.go
+++ b/pkg/ddc/vineyard/transform.go
@@ -191,6 +191,10 @@ func (e *VineyardEngine) transformFuse(runtime *datav1alpha1.VineyardRuntime, va
 	// parse fuse pod network mode
 	value.Fuse.HostNetwork = datav1alpha1.IsHostNetwork(runtime.Spec.Fuse.NetworkMode)
 
+	options := e.transformFuseOptions(runtime, value)
+	if len(options) != 0 {
+		value.Fuse.Options = options
+	}
 	e.transformResourcesForFuse(runtime, value)
 }
 
@@ -237,6 +241,21 @@ func (e *VineyardEngine) transformWorkerOptions(runtime *datav1alpha1.VineyardRu
 	return options
 }
 
+func (e *VineyardEngine) transformFuseOptions(runtime *datav1alpha1.VineyardRuntime, value *Vineyard) map[string]string {
+	options := map[string]string{
+		VineyarddSize: DefaultSize,
+		EtcdEndpoint:  fmt.Sprintf("http://%s-master-0.%s-master.%s:%d", value.FullnameOverride, value.FullnameOverride, e.namespace, value.Master.Ports[MasterClientName]),
+		EtcdPrefix:    DefaultEtcdPrefix,
+	}
+
+	if len(runtime.Spec.Fuse.Options) > 0 {
+		for key, value := range runtime.Spec.Fuse.Options {
+			options[key] = value
+		}
+	}
+	return options
+}
+
 func (e *VineyardEngine) transformWorkerPorts(runtime *datav1alpha1.VineyardRuntime) map[string]int {
 	ports := map[string]int{
 		WorkerRPCName:      WorkerRPCPort,
diff --git a/pkg/ddc/vineyard/type.go b/pkg/ddc/vineyard/type.go
index 2f422862..f5f9ee18 100644
--- a/pkg/ddc/vineyard/type.go
+++ b/pkg/ddc/vineyard/type.go
@@ -93,6 +93,7 @@ type Fuse struct {
 	NodeSelector    map[string]string            `json:"nodeSelector,omitempty"`
 	Resources       common.Resources             `json:"resources,omitempty"`
 	HostPID         bool                         `json:"hostPID,omitempty"`
+	Options         map[string]string            `json:"options,omitempty"`
 }
 
 type TieredStore struct {
diff --git a/pkg/utils/jindo/jindo.go b/pkg/utils/jindo/jindo.go
index 4c15f413..130216dd 100644
--- a/pkg/utils/jindo/jindo.go
+++ b/pkg/utils/jindo/jindo.go
@@ -29,7 +29,7 @@ const (
 
 	defaultJindofsxRuntimeImage = "registry.cn-shanghai.aliyuncs.com/jindofs/smartdata:4.6.8"
 
-	defaultJindoCacheRuntimeImage = "registry.cn-shanghai.aliyuncs.com/jindofs/smartdata:6.2.0"
+	defaultJindoCacheRuntimeImage = "registry.cn-shanghai.aliyuncs.com/jindofs/smartdata:6.4.0"
 )
 
 // GetDefaultEngineImpl gets the runtime type for Jindo
diff --git a/vendor/golang.org/x/time/rate/rate.go b/vendor/golang.org/x/time/rate/rate.go
index f0e0cf3c..8f6c7f49 100644
--- a/vendor/golang.org/x/time/rate/rate.go
+++ b/vendor/golang.org/x/time/rate/rate.go
@@ -52,6 +52,8 @@ func Every(interval time.Duration) Limit {
 // or its associated context.Context is canceled.
 //
 // The methods AllowN, ReserveN, and WaitN consume n tokens.
+//
+// Limiter is safe for simultaneous use by multiple goroutines.
 type Limiter struct {
 	mu     sync.Mutex
 	limit  Limit
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 80962a8a..4d1877b7 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -301,8 +301,8 @@ golang.org/x/text/secure/bidirule
 golang.org/x/text/transform
 golang.org/x/text/unicode/bidi
 golang.org/x/text/unicode/norm
-# golang.org/x/time v0.3.0
-## explicit
+# golang.org/x/time v0.5.0
+## explicit; go 1.18
 golang.org/x/time/rate
 # gomodules.xyz/jsonpatch/v2 v2.2.0
 ## explicit; go 1.12


Test patch:
diff --git a/pkg/dataflow/affinity_test.go b/pkg/dataflow/affinity_test.go
index e30c7646..bc4ca70b 100644
--- a/pkg/dataflow/affinity_test.go
+++ b/pkg/dataflow/affinity_test.go
@@ -20,6 +20,7 @@ import (
 	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
 	"github.com/fluid-cloudnative/fluid/pkg/common"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/fake"
+	"github.com/fluid-cloudnative/fluid/pkg/utils/feature"
 	appsv1 "k8s.io/api/apps/v1"
 	v1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -31,10 +32,11 @@ import (
 func TestInjectAffinityByRunAfterOp(t *testing.T) {
 
 	type args struct {
-		runAfter        *datav1alpha1.OperationRef
-		opNamespace     string
-		objects         []runtime.Object
-		currentAffinity *v1.Affinity
+		runAfter                *datav1alpha1.OperationRef
+		opNamespace             string
+		objects                 []runtime.Object
+		currentAffinity         *v1.Affinity
+		dataflowAffinityEnabled bool
 	}
 	tests := []struct {
 		name    string
@@ -58,8 +60,9 @@ func TestInjectAffinityByRunAfterOp(t *testing.T) {
 						Status: datav1alpha1.OperationStatus{},
 					},
 				},
-				opNamespace:     "default",
-				currentAffinity: nil,
+				opNamespace:             "default",
+				currentAffinity:         nil,
+				dataflowAffinityEnabled: true,
 			},
 			want:    nil,
 			wantErr: false,
@@ -83,8 +86,9 @@ func TestInjectAffinityByRunAfterOp(t *testing.T) {
 						Status: datav1alpha1.OperationStatus{},
 					},
 				},
-				opNamespace:     "default",
-				currentAffinity: nil,
+				opNamespace:             "default",
+				currentAffinity:         nil,
+				dataflowAffinityEnabled: true,
 			},
 			want:    nil,
 			wantErr: true,
@@ -124,8 +128,9 @@ func TestInjectAffinityByRunAfterOp(t *testing.T) {
 						},
 					},
 				},
-				opNamespace:     "default",
-				currentAffinity: nil,
+				opNamespace:             "default",
+				currentAffinity:         nil,
+				dataflowAffinityEnabled: true,
 			},
 			want: &v1.Affinity{
 				NodeAffinity: &v1.NodeAffinity{
@@ -186,8 +191,9 @@ func TestInjectAffinityByRunAfterOp(t *testing.T) {
 						},
 					},
 				},
-				opNamespace:     "default",
-				currentAffinity: nil,
+				opNamespace:             "default",
+				currentAffinity:         nil,
+				dataflowAffinityEnabled: true,
 			},
 			want: &v1.Affinity{
 				NodeAffinity: &v1.NodeAffinity{
@@ -260,8 +266,9 @@ func TestInjectAffinityByRunAfterOp(t *testing.T) {
 						},
 					},
 				},
-				opNamespace:     "default",
-				currentAffinity: nil,
+				opNamespace:             "default",
+				currentAffinity:         nil,
+				dataflowAffinityEnabled: true,
 			},
 			want: &v1.Affinity{
 				NodeAffinity: &v1.NodeAffinity{
@@ -283,6 +290,65 @@ func TestInjectAffinityByRunAfterOp(t *testing.T) {
 			},
 			wantErr: false,
 		},
+		{
+			name: "not enabled, prefer policy, use zone",
+			args: args{
+				runAfter: &datav1alpha1.OperationRef{
+					Kind:      "DataLoad",
+					Name:      "test-op",
+					Namespace: "test",
+					AffinityStrategy: datav1alpha1.AffinityStrategy{
+						Policy: datav1alpha1.PreferAffinityStrategy,
+						Prefers: []datav1alpha1.Prefer{
+							{
+								Weight: 10,
+								Name:   common.K8sZoneLabelKey,
+							},
+						},
+					},
+				},
+				objects: []runtime.Object{
+					&datav1alpha1.DataLoad{
+						ObjectMeta: metav1.ObjectMeta{
+							Name:      "test-op",
+							Namespace: "test",
+						},
+						Status: datav1alpha1.OperationStatus{
+							NodeAffinity: &v1.NodeAffinity{
+								RequiredDuringSchedulingIgnoredDuringExecution: &v1.NodeSelector{
+									NodeSelectorTerms: []v1.NodeSelectorTerm{
+										{
+											MatchExpressions: []v1.NodeSelectorRequirement{
+												{
+													Key:      common.K8sNodeNameLabelKey,
+													Operator: v1.NodeSelectorOpIn,
+													Values:   []string{"node01"},
+												},
+												{
+													Key:      common.K8sZoneLabelKey,
+													Operator: v1.NodeSelectorOpIn,
+													Values:   []string{"zone01"},
+												},
+												{
+													Key:      common.K8sRegionLabelKey,
+													Operator: v1.NodeSelectorOpIn,
+													Values:   []string{"region01"},
+												},
+											},
+										},
+									},
+								},
+							},
+						},
+					},
+				},
+				opNamespace:             "default",
+				currentAffinity:         nil,
+				dataflowAffinityEnabled: false,
+			},
+			want:    nil,
+			wantErr: false,
+		},
 	}
 	testScheme := runtime.NewScheme()
 	_ = v1.AddToScheme(testScheme)
@@ -292,6 +358,15 @@ func TestInjectAffinityByRunAfterOp(t *testing.T) {
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := fake.NewFakeClientWithScheme(testScheme, tt.args.objects...)
+
+			err := feature.DefaultMutableFeatureGate.SetFromMap(map[string]bool{
+				string(DataflowAffinity): tt.args.dataflowAffinityEnabled,
+			})
+			if err != nil {
+				t.Errorf("failed to set feature gate: %v", err)
+				return
+			}
+
 			got, err := InjectAffinityByRunAfterOp(c, tt.args.runAfter, tt.args.opNamespace, tt.args.currentAffinity)
 			if (err != nil) != tt.wantErr {
 				t.Errorf("InjectAffinityByRunAfterOp() error = %v, wantErr %v", err, tt.wantErr)
diff --git a/pkg/ddc/alluxio/load_data_test.go b/pkg/ddc/alluxio/load_data_test.go
index e8ab5be9..5dedb738 100644
--- a/pkg/ddc/alluxio/load_data_test.go
+++ b/pkg/ddc/alluxio/load_data_test.go
@@ -26,116 +26,16 @@ import (
 	"testing"
 
 	"github.com/brahma-adshonor/gohook"
-	corev1 "k8s.io/api/core/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/client-go/tools/record"
-
 	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
 	cdataload "github.com/fluid-cloudnative/fluid/pkg/dataload"
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/fake"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/kubeclient"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/runtime"
 )
 
-func TestCreateDataLoadJob(t *testing.T) {
-	mockExecCheckReleaseCommon := func(name string, namespace string) (exist bool, err error) {
-		return false, nil
-	}
-	mockExecCheckReleaseErr := func(name string, namespace string) (exist bool, err error) {
-		return false, errors.New("fail to check release")
-	}
-	mockExecInstallReleaseCommon := func(name string, namespace string, valueFile string, chartName string) error {
-		return nil
-	}
-	mockExecInstallReleaseErr := func(name string, namespace string, valueFile string, chartName string) error {
-		return errors.New("fail to install dataload chart")
-	}
-
-	wrappedUnhookCheckRelease := func() {
-		err := gohook.UnHook(helm.CheckRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-	wrappedUnhookInstallRelease := func() {
-		err := gohook.UnHook(helm.InstallRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-
-	targetDataLoad := datav1alpha1.DataLoad{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "hbase",
-			Namespace: "fluid",
-		},
-		Spec: datav1alpha1.DataLoadSpec{
-			Dataset: datav1alpha1.TargetDataset{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	datasetInputs := []datav1alpha1.Dataset{
-		{
-			ObjectMeta: metav1.ObjectMeta{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	testObjs := []runtime.Object{}
-	for _, datasetInput := range datasetInputs {
-		testObjs = append(testObjs, datasetInput.DeepCopy())
-	}
-	client := fake.NewFakeClientWithScheme(testScheme, testObjs...)
-
-	engine := AlluxioEngine{
-		name: "hbase",
-	}
-	ctx := cruntime.ReconcileRequestContext{
-		Log:      fake.NullLogger(),
-		Client:   client,
-		Recorder: record.NewFakeRecorder(1),
-	}
-
-	err := gohook.Hook(helm.CheckRelease, mockExecCheckReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error")
-	}
-	wrappedUnhookCheckRelease()
-
-	err = gohook.Hook(helm.CheckRelease, mockExecCheckReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error")
-	}
-	wrappedUnhookInstallRelease()
-
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err != nil {
-		t.Errorf("fail to exec the function")
-	}
-	wrappedUnhookCheckRelease()
-}
-
 func TestGenerateDataLoadValueFile(t *testing.T) {
 	datasetInputs := []datav1alpha1.Dataset{
 		{
diff --git a/pkg/ddc/alluxio/transform_init_users_test.go b/pkg/ddc/alluxio/transform_init_users_test.go
index d181b69d..e115cc11 100644
--- a/pkg/ddc/alluxio/transform_init_users_test.go
+++ b/pkg/ddc/alluxio/transform_init_users_test.go
@@ -1,5 +1,5 @@
 /*
-Copyright 2023 The Fluid Author.
+Copyright 2020 The Fluid Author.
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff --git a/pkg/ddc/base/operation_lock_test.go b/pkg/ddc/base/operation_lock_test.go
index 7437c966..a1c6d1af 100644
--- a/pkg/ddc/base/operation_lock_test.go
+++ b/pkg/ddc/base/operation_lock_test.go
@@ -46,7 +46,7 @@ func TestGetDataBackupRef(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			if got := GetDataOperationKey(tt.args.object); got != tt.want {
+			if got := getDataOperationKey(tt.args.object); got != tt.want {
 				t.Errorf("GetDataBackupRef() = %v, want %v", got, tt.want)
 			}
 		})
diff --git a/pkg/ddc/base/template_engine_test.go b/pkg/ddc/base/template_engine_test.go
index 6a37c0a9..4cd1b613 100644
--- a/pkg/ddc/base/template_engine_test.go
+++ b/pkg/ddc/base/template_engine_test.go
@@ -39,7 +39,6 @@ import (
 
 var _ = Describe("TemplateEngine", func() {
 	mockDatasetName := "fluid-data-set"
-	mockDataLoadName := "fluid-data-load"
 	mockNamespace := "default"
 
 	fakeDataset := &datav1alpha1.Dataset{
@@ -48,12 +47,6 @@ var _ = Describe("TemplateEngine", func() {
 			Namespace: mockNamespace,
 		},
 	}
-	fakeDataLoad := datav1alpha1.DataLoad{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      mockDataLoadName,
-			Namespace: mockNamespace,
-		},
-	}
 	s := apimachineryRuntime.NewScheme()
 	s.AddKnownTypes(datav1alpha1.GroupVersion, fakeDataset)
 	fakeClient := fake.NewFakeClientWithScheme(s, fakeDataset)
@@ -209,13 +202,6 @@ var _ = Describe("TemplateEngine", func() {
 		})
 	})
 
-	Describe("LoadData", func() {
-		It("Should Load data successfully", func() {
-			impl.EXPECT().CreateDataLoadJob(fakeCtx, fakeDataLoad).Return(nil).Times(1)
-			Expect(t.LoadData(fakeCtx, fakeDataLoad)).To(BeNil())
-		})
-	})
-
 	Describe("CheckRuntimeReady", func() {
 		It("Should check runtime is ready", func() {
 			impl.EXPECT().CheckRuntimeReady().Return(true).Times(1)
diff --git a/pkg/ddc/efc/data_load_test.go b/pkg/ddc/efc/data_load_test.go
index 03e3e18b..fb5a07d3 100644
--- a/pkg/ddc/efc/data_load_test.go
+++ b/pkg/ddc/efc/data_load_test.go
@@ -17,166 +17,18 @@
 package efc
 
 import (
-	"errors"
 	"testing"
 
 	"github.com/brahma-adshonor/gohook"
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
 	"github.com/fluid-cloudnative/fluid/pkg/ddc/efc/operations"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/fake"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
 	appsv1 "k8s.io/api/apps/v1"
 	v1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/client-go/tools/record"
 	utilpointer "k8s.io/utils/pointer"
 )
 
-func TestEFCEngine_CreateDataLoadJob(t *testing.T) {
-	configMap := &v1.ConfigMap{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "efcdemo-efc-values",
-			Namespace: "fluid",
-		},
-		Data: map[string]string{
-			"data": valuesConfigMapData,
-		},
-	}
-
-	mockExecCheckReleaseCommon := func(name string, namespace string) (exist bool, err error) {
-		return false, nil
-	}
-	mockExecCheckReleaseErr := func(name string, namespace string) (exist bool, err error) {
-		return false, errors.New("fail to check release")
-	}
-	mockExecInstallReleaseCommon := func(name string, namespace string, valueFile string, chartName string) error {
-		return nil
-	}
-	mockExecInstallReleaseErr := func(name string, namespace string, valueFile string, chartName string) error {
-		return errors.New("fail to install dataload chart")
-	}
-
-	wrappedUnhookCheckRelease := func() {
-		err := gohook.UnHook(helm.CheckRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-	wrappedUnhookInstallRelease := func() {
-		err := gohook.UnHook(helm.InstallRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-
-	targetDataLoad := datav1alpha1.DataLoad{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "efcdemo-dataload",
-			Namespace: "fluid",
-		},
-		Spec: datav1alpha1.DataLoadSpec{
-			Dataset: datav1alpha1.TargetDataset{
-				Name:      "efcdemo",
-				Namespace: "fluid",
-			},
-		},
-	}
-	datasetInputs := []datav1alpha1.Dataset{
-		{
-			ObjectMeta: metav1.ObjectMeta{
-				Name:      "efcdemo",
-				Namespace: "fluid",
-			},
-		},
-	}
-	statefulsetInputs := []appsv1.StatefulSet{
-		{
-			ObjectMeta: metav1.ObjectMeta{
-				Name:      "efcdemo-worker",
-				Namespace: "fluid",
-			},
-			Spec: appsv1.StatefulSetSpec{
-				Selector: &metav1.LabelSelector{
-					MatchLabels: map[string]string{"a": "b"},
-				},
-			},
-		},
-	}
-	podListInputs := []v1.PodList{{
-		Items: []v1.Pod{{
-			ObjectMeta: metav1.ObjectMeta{
-				Labels: map[string]string{"a": "b"},
-			},
-		}},
-	}}
-	testObjs := []runtime.Object{}
-	testObjs = append(testObjs, configMap)
-	for _, datasetInput := range datasetInputs {
-		testObjs = append(testObjs, datasetInput.DeepCopy())
-	}
-	for _, statefulsetInput := range statefulsetInputs {
-		testObjs = append(testObjs, statefulsetInput.DeepCopy())
-	}
-	for _, podInput := range podListInputs {
-		testObjs = append(testObjs, podInput.DeepCopy())
-	}
-	testScheme.AddKnownTypes(v1.SchemeGroupVersion, configMap)
-	client := fake.NewFakeClientWithScheme(testScheme, testObjs...)
-	engine := &EFCEngine{
-		name:      "efcdemo",
-		namespace: "fluid",
-		Client:    client,
-		Log:       fake.NullLogger(),
-	}
-	ctx := cruntime.ReconcileRequestContext{
-		Log:      fake.NullLogger(),
-		Client:   client,
-		Recorder: record.NewFakeRecorder(1),
-	}
-
-	err := gohook.Hook(helm.CheckRelease, mockExecCheckReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error: %v", err)
-	}
-	wrappedUnhookCheckRelease()
-
-	err = gohook.Hook(helm.CheckRelease, mockExecCheckReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error: %v", err)
-	}
-	wrappedUnhookInstallRelease()
-
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err != nil {
-		t.Errorf("fail to exec the function: %v", err)
-	}
-	wrappedUnhookCheckRelease()
-}
-
-func TestEFCEngine_GenerateDataLoadValueFileWithRuntimeHDD(t *testing.T) {
-}
-
-func TestEFCEngine_GenerateDataLoadValueFileWithRuntime(t *testing.T) {
-}
-
 func TestEFCEngine_CheckRuntimeReady(t *testing.T) {
 	type fields struct {
 		name      string
diff --git a/pkg/ddc/goosefs/load_data_test.go b/pkg/ddc/goosefs/load_data_test.go
index 1f388958..2c3c770b 100644
--- a/pkg/ddc/goosefs/load_data_test.go
+++ b/pkg/ddc/goosefs/load_data_test.go
@@ -27,116 +27,16 @@ import (
 	"testing"
 
 	"github.com/brahma-adshonor/gohook"
-	corev1 "k8s.io/api/core/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/client-go/tools/record"
-
 	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
 	cdataload "github.com/fluid-cloudnative/fluid/pkg/dataload"
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/fake"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/kubeclient"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/runtime"
 )
 
-func TestCreateDataLoadJob(t *testing.T) {
-	mockExecCheckReleaseCommon := func(name string, namespace string) (exist bool, err error) {
-		return false, nil
-	}
-	mockExecCheckReleaseErr := func(name string, namespace string) (exist bool, err error) {
-		return false, errors.New("fail to check release")
-	}
-	mockExecInstallReleaseCommon := func(name string, namespace string, valueFile string, chartName string) error {
-		return nil
-	}
-	mockExecInstallReleaseErr := func(name string, namespace string, valueFile string, chartName string) error {
-		return errors.New("fail to install dataload chart")
-	}
-
-	wrappedUnhookCheckRelease := func() {
-		err := gohook.UnHook(helm.CheckRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-	wrappedUnhookInstallRelease := func() {
-		err := gohook.UnHook(helm.InstallRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-
-	targetDataLoad := datav1alpha1.DataLoad{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "hbase",
-			Namespace: "fluid",
-		},
-		Spec: datav1alpha1.DataLoadSpec{
-			Dataset: datav1alpha1.TargetDataset{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	datasetInputs := []datav1alpha1.Dataset{
-		{
-			ObjectMeta: metav1.ObjectMeta{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	testObjs := []runtime.Object{}
-	for _, datasetInput := range datasetInputs {
-		testObjs = append(testObjs, datasetInput.DeepCopy())
-	}
-	client := fake.NewFakeClientWithScheme(testScheme, testObjs...)
-
-	engine := GooseFSEngine{
-		name: "hbase",
-	}
-	ctx := cruntime.ReconcileRequestContext{
-		Log:      fake.NullLogger(),
-		Client:   client,
-		Recorder: record.NewFakeRecorder(1),
-	}
-
-	err := gohook.Hook(helm.CheckRelease, mockExecCheckReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error")
-	}
-	wrappedUnhookCheckRelease()
-
-	err = gohook.Hook(helm.CheckRelease, mockExecCheckReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error")
-	}
-	wrappedUnhookInstallRelease()
-
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err != nil {
-		t.Errorf("fail to exec the function")
-	}
-	wrappedUnhookCheckRelease()
-}
-
 func TestGenerateDataLoadValueFile(t *testing.T) {
 	datasetInputs := []datav1alpha1.Dataset{
 		{
diff --git a/pkg/ddc/jindo/load_data_test.go b/pkg/ddc/jindo/load_data_test.go
index a8b44b69..1afbecda 100644
--- a/pkg/ddc/jindo/load_data_test.go
+++ b/pkg/ddc/jindo/load_data_test.go
@@ -26,172 +26,18 @@ import (
 	"testing"
 
 	"github.com/brahma-adshonor/gohook"
-	corev1 "k8s.io/api/core/v1"
-	"k8s.io/apimachinery/pkg/api/resource"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/client-go/tools/record"
-
 	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
 	"github.com/fluid-cloudnative/fluid/pkg/common"
 	cdataload "github.com/fluid-cloudnative/fluid/pkg/dataload"
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/fake"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/kubeclient"
+	corev1 "k8s.io/api/core/v1"
+	"k8s.io/apimachinery/pkg/api/resource"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/runtime"
 )
 
-func TestCreateDataLoadJob(t *testing.T) {
-	mockExecCheckReleaseCommon := func(name string, namespace string) (exist bool, err error) {
-		return false, nil
-	}
-	mockExecCheckReleaseErr := func(name string, namespace string) (exist bool, err error) {
-		return false, errors.New("fail to check release")
-	}
-	mockExecInstallReleaseErr := func(name string, namespace string, valueFile string, chartName string) error {
-		return errors.New("fail to install dataload chart")
-	}
-
-	wrappedUnhookCheckRelease := func() {
-		err := gohook.UnHook(helm.CheckRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-
-	targetDataLoad := datav1alpha1.DataLoad{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "hbase",
-			Namespace: "fluid",
-		},
-		Spec: datav1alpha1.DataLoadSpec{
-			Dataset: datav1alpha1.TargetDataset{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	datasetInputs := []datav1alpha1.Dataset{
-		{
-			ObjectMeta: metav1.ObjectMeta{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	testObjs := []runtime.Object{}
-	for _, datasetInput := range datasetInputs {
-		testObjs = append(testObjs, datasetInput.DeepCopy())
-	}
-	client := fake.NewFakeClientWithScheme(testScheme, testObjs...)
-
-	engine := JindoEngine{
-		name: "hbase",
-	}
-	ctx := cruntime.ReconcileRequestContext{
-		Log:      fake.NullLogger(),
-		Client:   client,
-		Recorder: record.NewFakeRecorder(1),
-	}
-
-	err := gohook.Hook(helm.CheckRelease, mockExecCheckReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error")
-	}
-	wrappedUnhookCheckRelease()
-
-	err = gohook.Hook(helm.CheckRelease, mockExecCheckReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-}
-
-func TestCreateDataLoadJobWithOption(t *testing.T) {
-	mockExecCheckReleaseCommon := func(name string, namespace string) (exist bool, err error) {
-		return false, nil
-	}
-	mockExecCheckReleaseErr := func(name string, namespace string) (exist bool, err error) {
-		return false, errors.New("fail to check release")
-	}
-	mockExecInstallReleaseErr := func(name string, namespace string, valueFile string, chartName string) error {
-		return errors.New("fail to install dataload chart")
-	}
-
-	wrappedUnhookCheckRelease := func() {
-		err := gohook.UnHook(helm.CheckRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-
-	targetDataLoad := datav1alpha1.DataLoad{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "hbase",
-			Namespace: "fluid",
-		},
-		Spec: datav1alpha1.DataLoadSpec{
-			Dataset: datav1alpha1.TargetDataset{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-			LoadMetadata: true,
-			Options: map[string]string{
-				"atomicCache":      "true",
-				"loadMetadataOnly": "true",
-			},
-		},
-	}
-	datasetInputs := []datav1alpha1.Dataset{
-		{
-			ObjectMeta: metav1.ObjectMeta{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	testObjs := []runtime.Object{}
-	for _, datasetInput := range datasetInputs {
-		testObjs = append(testObjs, datasetInput.DeepCopy())
-	}
-	client := fake.NewFakeClientWithScheme(testScheme, testObjs...)
-
-	engine := JindoEngine{
-		name: "hbase",
-	}
-	ctx := cruntime.ReconcileRequestContext{
-		Log:      fake.NullLogger(),
-		Client:   client,
-		Recorder: record.NewFakeRecorder(1),
-	}
-
-	err := gohook.Hook(helm.CheckRelease, mockExecCheckReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error")
-	}
-	wrappedUnhookCheckRelease()
-
-	err = gohook.Hook(helm.CheckRelease, mockExecCheckReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-}
-
 func TestGenerateDataLoadValueFile(t *testing.T) {
 	datasetInputs := []datav1alpha1.Dataset{
 		{
diff --git a/pkg/ddc/jindocache/load_data_test.go b/pkg/ddc/jindocache/load_data_test.go
index 0c0eea6c..e4f7499c 100644
--- a/pkg/ddc/jindocache/load_data_test.go
+++ b/pkg/ddc/jindocache/load_data_test.go
@@ -26,172 +26,18 @@ import (
 	"testing"
 
 	"github.com/brahma-adshonor/gohook"
-	corev1 "k8s.io/api/core/v1"
-	"k8s.io/apimachinery/pkg/api/resource"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/client-go/tools/record"
-
 	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
 	"github.com/fluid-cloudnative/fluid/pkg/common"
 	cdataload "github.com/fluid-cloudnative/fluid/pkg/dataload"
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/fake"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/kubeclient"
+	corev1 "k8s.io/api/core/v1"
+	"k8s.io/apimachinery/pkg/api/resource"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/runtime"
 )
 
-func TestCreateDataLoadJob(t *testing.T) {
-	mockExecCheckReleaseCommon := func(name string, namespace string) (exist bool, err error) {
-		return false, nil
-	}
-	mockExecCheckReleaseErr := func(name string, namespace string) (exist bool, err error) {
-		return false, errors.New("fail to check release")
-	}
-	mockExecInstallReleaseErr := func(name string, namespace string, valueFile string, chartName string) error {
-		return errors.New("fail to install dataload chart")
-	}
-
-	wrappedUnhookCheckRelease := func() {
-		err := gohook.UnHook(helm.CheckRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-
-	targetDataLoad := datav1alpha1.DataLoad{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "hbase",
-			Namespace: "fluid",
-		},
-		Spec: datav1alpha1.DataLoadSpec{
-			Dataset: datav1alpha1.TargetDataset{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	datasetInputs := []datav1alpha1.Dataset{
-		{
-			ObjectMeta: metav1.ObjectMeta{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	testObjs := []runtime.Object{}
-	for _, datasetInput := range datasetInputs {
-		testObjs = append(testObjs, datasetInput.DeepCopy())
-	}
-	client := fake.NewFakeClientWithScheme(testScheme, testObjs...)
-
-	engine := JindoCacheEngine{
-		name: "hbase",
-	}
-	ctx := cruntime.ReconcileRequestContext{
-		Log:      fake.NullLogger(),
-		Client:   client,
-		Recorder: record.NewFakeRecorder(1),
-	}
-
-	err := gohook.Hook(helm.CheckRelease, mockExecCheckReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error")
-	}
-	wrappedUnhookCheckRelease()
-
-	err = gohook.Hook(helm.CheckRelease, mockExecCheckReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-}
-
-func TestCreateDataLoadJobWithOption(t *testing.T) {
-	mockExecCheckReleaseCommon := func(name string, namespace string) (exist bool, err error) {
-		return false, nil
-	}
-	mockExecCheckReleaseErr := func(name string, namespace string) (exist bool, err error) {
-		return false, errors.New("fail to check release")
-	}
-	mockExecInstallReleaseErr := func(name string, namespace string, valueFile string, chartName string) error {
-		return errors.New("fail to install dataload chart")
-	}
-
-	wrappedUnhookCheckRelease := func() {
-		err := gohook.UnHook(helm.CheckRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-
-	targetDataLoad := datav1alpha1.DataLoad{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "hbase",
-			Namespace: "fluid",
-		},
-		Spec: datav1alpha1.DataLoadSpec{
-			Dataset: datav1alpha1.TargetDataset{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-			LoadMetadata: true,
-			Options: map[string]string{
-				"atomicCache":      "true",
-				"loadMetadataOnly": "true",
-			},
-		},
-	}
-	datasetInputs := []datav1alpha1.Dataset{
-		{
-			ObjectMeta: metav1.ObjectMeta{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	testObjs := []runtime.Object{}
-	for _, datasetInput := range datasetInputs {
-		testObjs = append(testObjs, datasetInput.DeepCopy())
-	}
-	client := fake.NewFakeClientWithScheme(testScheme, testObjs...)
-
-	engine := JindoCacheEngine{
-		name: "hbase",
-	}
-	ctx := cruntime.ReconcileRequestContext{
-		Log:      fake.NullLogger(),
-		Client:   client,
-		Recorder: record.NewFakeRecorder(1),
-	}
-
-	err := gohook.Hook(helm.CheckRelease, mockExecCheckReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error")
-	}
-	wrappedUnhookCheckRelease()
-
-	err = gohook.Hook(helm.CheckRelease, mockExecCheckReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-}
-
 func TestGenerateDataLoadValueFile(t *testing.T) {
 	datasetInputs := []datav1alpha1.Dataset{
 		{
diff --git a/pkg/ddc/jindocache/transform_fuse_test.go b/pkg/ddc/jindocache/transform_fuse_test.go
index bc0bf442..bbbf4630 100644
--- a/pkg/ddc/jindocache/transform_fuse_test.go
+++ b/pkg/ddc/jindocache/transform_fuse_test.go
@@ -188,7 +188,7 @@ func TestParseFuseImage(t *testing.T) {
 					}},
 				}},
 			jindoValue:            &Jindo{},
-			expect:                "registry.cn-shanghai.aliyuncs.com/jindofs/jindo-fuse:6.2.0",
+			expect:                "registry.cn-shanghai.aliyuncs.com/jindofs/jindo-fuse:6.4.0",
 			expectImagePullPolicy: "Always",
 		},
 		{
diff --git a/pkg/ddc/jindocache/transform_test.go b/pkg/ddc/jindocache/transform_test.go
index 670438bc..74fae227 100644
--- a/pkg/ddc/jindocache/transform_test.go
+++ b/pkg/ddc/jindocache/transform_test.go
@@ -131,7 +131,7 @@ func TestParseSmartDataImage(t *testing.T) {
 					}},
 				}},
 			jindoValue:            &Jindo{},
-			expect:                "registry.cn-shanghai.aliyuncs.com/jindofs/smartdata:6.2.0",
+			expect:                "registry.cn-shanghai.aliyuncs.com/jindofs/smartdata:6.4.0",
 			expectImagePullPolicy: "Always",
 			expectDnsServer:       "1.1.1.1",
 		},
diff --git a/pkg/ddc/jindofsx/load_data_test.go b/pkg/ddc/jindofsx/load_data_test.go
index 38db68ee..1e699e0c 100644
--- a/pkg/ddc/jindofsx/load_data_test.go
+++ b/pkg/ddc/jindofsx/load_data_test.go
@@ -26,172 +26,18 @@ import (
 	"testing"
 
 	"github.com/brahma-adshonor/gohook"
-	corev1 "k8s.io/api/core/v1"
-	"k8s.io/apimachinery/pkg/api/resource"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/client-go/tools/record"
-
 	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
 	"github.com/fluid-cloudnative/fluid/pkg/common"
 	cdataload "github.com/fluid-cloudnative/fluid/pkg/dataload"
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/fake"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/kubeclient"
+	corev1 "k8s.io/api/core/v1"
+	"k8s.io/apimachinery/pkg/api/resource"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/runtime"
 )
 
-func TestCreateDataLoadJob(t *testing.T) {
-	mockExecCheckReleaseCommon := func(name string, namespace string) (exist bool, err error) {
-		return false, nil
-	}
-	mockExecCheckReleaseErr := func(name string, namespace string) (exist bool, err error) {
-		return false, errors.New("fail to check release")
-	}
-	mockExecInstallReleaseErr := func(name string, namespace string, valueFile string, chartName string) error {
-		return errors.New("fail to install dataload chart")
-	}
-
-	wrappedUnhookCheckRelease := func() {
-		err := gohook.UnHook(helm.CheckRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-
-	targetDataLoad := datav1alpha1.DataLoad{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "hbase",
-			Namespace: "fluid",
-		},
-		Spec: datav1alpha1.DataLoadSpec{
-			Dataset: datav1alpha1.TargetDataset{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	datasetInputs := []datav1alpha1.Dataset{
-		{
-			ObjectMeta: metav1.ObjectMeta{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	testObjs := []runtime.Object{}
-	for _, datasetInput := range datasetInputs {
-		testObjs = append(testObjs, datasetInput.DeepCopy())
-	}
-	client := fake.NewFakeClientWithScheme(testScheme, testObjs...)
-
-	engine := JindoFSxEngine{
-		name: "hbase",
-	}
-	ctx := cruntime.ReconcileRequestContext{
-		Log:      fake.NullLogger(),
-		Client:   client,
-		Recorder: record.NewFakeRecorder(1),
-	}
-
-	err := gohook.Hook(helm.CheckRelease, mockExecCheckReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error")
-	}
-	wrappedUnhookCheckRelease()
-
-	err = gohook.Hook(helm.CheckRelease, mockExecCheckReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-}
-
-func TestCreateDataLoadJobWithOption(t *testing.T) {
-	mockExecCheckReleaseCommon := func(name string, namespace string) (exist bool, err error) {
-		return false, nil
-	}
-	mockExecCheckReleaseErr := func(name string, namespace string) (exist bool, err error) {
-		return false, errors.New("fail to check release")
-	}
-	mockExecInstallReleaseErr := func(name string, namespace string, valueFile string, chartName string) error {
-		return errors.New("fail to install dataload chart")
-	}
-
-	wrappedUnhookCheckRelease := func() {
-		err := gohook.UnHook(helm.CheckRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-
-	targetDataLoad := datav1alpha1.DataLoad{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "hbase",
-			Namespace: "fluid",
-		},
-		Spec: datav1alpha1.DataLoadSpec{
-			Dataset: datav1alpha1.TargetDataset{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-			LoadMetadata: true,
-			Options: map[string]string{
-				"atomicCache":      "true",
-				"loadMetadataOnly": "true",
-			},
-		},
-	}
-	datasetInputs := []datav1alpha1.Dataset{
-		{
-			ObjectMeta: metav1.ObjectMeta{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	testObjs := []runtime.Object{}
-	for _, datasetInput := range datasetInputs {
-		testObjs = append(testObjs, datasetInput.DeepCopy())
-	}
-	client := fake.NewFakeClientWithScheme(testScheme, testObjs...)
-
-	engine := JindoFSxEngine{
-		name: "hbase",
-	}
-	ctx := cruntime.ReconcileRequestContext{
-		Log:      fake.NullLogger(),
-		Client:   client,
-		Recorder: record.NewFakeRecorder(1),
-	}
-
-	err := gohook.Hook(helm.CheckRelease, mockExecCheckReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error")
-	}
-	wrappedUnhookCheckRelease()
-
-	err = gohook.Hook(helm.CheckRelease, mockExecCheckReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-}
-
 func TestGenerateDataLoadValueFile(t *testing.T) {
 	datasetInputs := []datav1alpha1.Dataset{
 		{
diff --git a/pkg/ddc/juicefs/data_load_test.go b/pkg/ddc/juicefs/data_load_test.go
index 551ba2b4..6e1e5333 100644
--- a/pkg/ddc/juicefs/data_load_test.go
+++ b/pkg/ddc/juicefs/data_load_test.go
@@ -17,7 +17,6 @@ limitations under the License.
 package juicefs
 
 import (
-	"errors"
 	"os"
 	"path/filepath"
 	"reflect"
@@ -26,18 +25,14 @@ import (
 
 	"github.com/fluid-cloudnative/fluid/pkg/common"
 
-	"github.com/brahma-adshonor/gohook"
-	appsv1 "k8s.io/api/apps/v1"
-	v1 "k8s.io/api/core/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/client-go/tools/record"
-
 	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
 	cdataload "github.com/fluid-cloudnative/fluid/pkg/dataload"
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/fake"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
+	appsv1 "k8s.io/api/apps/v1"
+	v1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/runtime"
 )
 
 var valuesConfigMapData = `
@@ -124,143 +119,6 @@ worker:
     name: cache-dir-1
 `
 
-func TestJuiceFSEngine_CreateDataLoadJob(t *testing.T) {
-	configMap := &v1.ConfigMap{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "test-dataset-juicefs-values",
-			Namespace: "fluid",
-		},
-		Data: map[string]string{
-			"data": valuesConfigMapData,
-		},
-	}
-
-	mockExecCheckReleaseCommon := func(name string, namespace string) (exist bool, err error) {
-		return false, nil
-	}
-	mockExecCheckReleaseErr := func(name string, namespace string) (exist bool, err error) {
-		return false, errors.New("fail to check release")
-	}
-	mockExecInstallReleaseCommon := func(name string, namespace string, valueFile string, chartName string) error {
-		return nil
-	}
-	mockExecInstallReleaseErr := func(name string, namespace string, valueFile string, chartName string) error {
-		return errors.New("fail to install dataload chart")
-	}
-
-	wrappedUnhookCheckRelease := func() {
-		err := gohook.UnHook(helm.CheckRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-	wrappedUnhookInstallRelease := func() {
-		err := gohook.UnHook(helm.InstallRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-
-	targetDataLoad := datav1alpha1.DataLoad{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "hbase",
-			Namespace: "fluid",
-		},
-		Spec: datav1alpha1.DataLoadSpec{
-			Dataset: datav1alpha1.TargetDataset{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	datasetInputs := []datav1alpha1.Dataset{
-		{
-			ObjectMeta: metav1.ObjectMeta{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	statefulsetInputs := []appsv1.StatefulSet{
-		{
-			ObjectMeta: metav1.ObjectMeta{
-				Name:      "juicefs-worker",
-				Namespace: "fluid",
-			},
-			Spec: appsv1.StatefulSetSpec{
-				Selector: &metav1.LabelSelector{
-					MatchLabels: map[string]string{"a": "b"},
-				},
-			},
-		},
-	}
-	podListInputs := []v1.PodList{{
-		Items: []v1.Pod{{
-			ObjectMeta: metav1.ObjectMeta{
-				Labels: map[string]string{"a": "b"},
-			},
-		}},
-	}}
-	testObjs := []runtime.Object{}
-	testObjs = append(testObjs, configMap)
-	for _, datasetInput := range datasetInputs {
-		testObjs = append(testObjs, datasetInput.DeepCopy())
-	}
-	for _, statefulsetInput := range statefulsetInputs {
-		testObjs = append(testObjs, statefulsetInput.DeepCopy())
-	}
-	for _, podInput := range podListInputs {
-		testObjs = append(testObjs, podInput.DeepCopy())
-	}
-	testScheme.AddKnownTypes(v1.SchemeGroupVersion, configMap)
-	client := fake.NewFakeClientWithScheme(testScheme, testObjs...)
-	engine := &JuiceFSEngine{
-		name:      "juicefs",
-		namespace: "fluid",
-		Client:    client,
-		Log:       fake.NullLogger(),
-	}
-	ctx := cruntime.ReconcileRequestContext{
-		Log:      fake.NullLogger(),
-		Client:   client,
-		Recorder: record.NewFakeRecorder(1),
-	}
-
-	err := gohook.Hook(helm.CheckRelease, mockExecCheckReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error: %v", err)
-	}
-	wrappedUnhookCheckRelease()
-
-	err = gohook.Hook(helm.CheckRelease, mockExecCheckReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err == nil {
-		t.Errorf("fail to catch the error: %v", err)
-	}
-	wrappedUnhookInstallRelease()
-
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err != nil {
-		t.Errorf("fail to exec the function: %v", err)
-	}
-	wrappedUnhookCheckRelease()
-}
-
 func TestJuiceFSEngine_GenerateDataLoadValueFileWithRuntimeHDD(t *testing.T) {
 	configMap := &v1.ConfigMap{
 		ObjectMeta: metav1.ObjectMeta{
diff --git a/pkg/ddc/juicefs/data_migrate_test.go b/pkg/ddc/juicefs/data_migrate_test.go
index c90fa18e..b744c16f 100644
--- a/pkg/ddc/juicefs/data_migrate_test.go
+++ b/pkg/ddc/juicefs/data_migrate_test.go
@@ -18,7 +18,6 @@ package juicefs
 
 import (
 	"encoding/base64"
-	"errors"
 	"fmt"
 	"github.com/fluid-cloudnative/fluid/pkg/dataoperation"
 	"github.com/fluid-cloudnative/fluid/pkg/utils"
@@ -28,150 +27,15 @@ import (
 	"strings"
 	"testing"
 
-	"github.com/brahma-adshonor/gohook"
-	corev1 "k8s.io/api/core/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/client-go/tools/record"
-
 	"github.com/fluid-cloudnative/fluid/api/v1alpha1"
 	cdatamigrate "github.com/fluid-cloudnative/fluid/pkg/datamigrate"
 	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
 	"github.com/fluid-cloudnative/fluid/pkg/utils/fake"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/runtime"
 )
 
-func TestJuiceFSEngine_CreateDataMigrateJob(t *testing.T) {
-	configMap := &corev1.ConfigMap{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "test-dataset-juicefs-values",
-			Namespace: "fluid",
-		},
-		Data: map[string]string{
-			"data": valuesConfigMapData,
-		},
-	}
-
-	mockExecCheckReleaseCommon := func(name string, namespace string) (exist bool, err error) {
-		return false, nil
-	}
-	mockExecCheckReleaseErr := func(name string, namespace string) (exist bool, err error) {
-		return false, errors.New("fail to check release")
-	}
-	mockExecInstallReleaseCommon := func(name string, namespace string, valueFile string, chartName string) error {
-		return nil
-	}
-	mockExecInstallReleaseErr := func(name string, namespace string, valueFile string, chartName string) error {
-		return errors.New("fail to install datamigrate chart")
-	}
-
-	wrappedUnhookCheckRelease := func() {
-		err := gohook.UnHook(helm.CheckRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-	wrappedUnhookInstallRelease := func() {
-		err := gohook.UnHook(helm.InstallRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-
-	targetDataMigrate := v1alpha1.DataMigrate{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "test",
-			Namespace: "fluid",
-		},
-		Spec: v1alpha1.DataMigrateSpec{
-			From: v1alpha1.DataToMigrate{
-				DataSet: &v1alpha1.DatasetToMigrate{
-					Name:      "test-dataset",
-					Namespace: "fluid",
-				},
-			},
-			To: v1alpha1.DataToMigrate{
-				ExternalStorage: &v1alpha1.ExternalStorage{
-					URI: "minio://test/test",
-				},
-			},
-		},
-	}
-	datasetInputs := []v1alpha1.Dataset{{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "test-dataset",
-			Namespace: "fluid",
-		},
-		Spec: v1alpha1.DatasetSpec{
-			Mounts: []v1alpha1.Mount{{
-				MountPoint: "juicefs:///",
-			}},
-		},
-	}}
-	podListInputs := []corev1.PodList{{
-		Items: []corev1.Pod{{
-			ObjectMeta: metav1.ObjectMeta{
-				Labels: map[string]string{"a": "b"},
-			},
-		}},
-	}}
-	testObjs := []runtime.Object{}
-	testObjs = append(testObjs, configMap)
-	for _, datasetInput := range datasetInputs {
-		testObjs = append(testObjs, datasetInput.DeepCopy())
-	}
-	for _, podInput := range podListInputs {
-		testObjs = append(testObjs, podInput.DeepCopy())
-	}
-	testScheme.AddKnownTypes(corev1.SchemeGroupVersion, configMap)
-	client := fake.NewFakeClientWithScheme(testScheme, testObjs...)
-	engine := &JuiceFSEngine{
-		name:      "juicefs",
-		namespace: "fluid",
-		Client:    client,
-		Log:       fake.NullLogger(),
-	}
-	ctx := cruntime.ReconcileRequestContext{
-		Log:      fake.NullLogger(),
-		Client:   client,
-		Recorder: record.NewFakeRecorder(1),
-	}
-
-	err := gohook.Hook(helm.CheckRelease, mockExecCheckReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataMigrateJob(ctx, targetDataMigrate)
-	if err == nil {
-		t.Errorf("fail to catch the error: %v", err)
-	}
-	wrappedUnhookCheckRelease()
-
-	err = gohook.Hook(helm.CheckRelease, mockExecCheckReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataMigrateJob(ctx, targetDataMigrate)
-	if err == nil {
-		t.Errorf("fail to catch the error: %v", err)
-	}
-	wrappedUnhookInstallRelease()
-
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataMigrateJob(ctx, targetDataMigrate)
-	if err != nil {
-		t.Errorf("fail to exec the function: %v", err)
-	}
-	wrappedUnhookCheckRelease()
-}
-
 func TestJuiceFSEngine_generateDataMigrateValueFile(t *testing.T) {
 	configMap := &corev1.ConfigMap{
 		ObjectMeta: metav1.ObjectMeta{
diff --git a/pkg/ddc/thin/dataload_test.go b/pkg/ddc/thin/dataload_test.go
deleted file mode 100644
index 1e223de2..00000000
--- a/pkg/ddc/thin/dataload_test.go
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-  Copyright 2022 The Fluid Authors.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-*/
-
-package thin
-
-import (
-	"errors"
-	"testing"
-
-	"github.com/brahma-adshonor/gohook"
-	datav1alpha1 "github.com/fluid-cloudnative/fluid/api/v1alpha1"
-	cruntime "github.com/fluid-cloudnative/fluid/pkg/runtime"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/fake"
-	"github.com/fluid-cloudnative/fluid/pkg/utils/helm"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/client-go/tools/record"
-)
-
-func TestThinEngine_CreateDataLoadJob(t *testing.T) {
-	mockExecCheckReleaseCommon := func(name string, namespace string) (exist bool, err error) {
-		return false, nil
-	}
-	mockExecInstallReleaseCommon := func(name string, namespace string, valueFile string, chartName string) error {
-		return nil
-	}
-	mockExecInstallReleaseErr := func(name string, namespace string, valueFile string, chartName string) error {
-		return errors.New("fail to install dataload chart")
-	}
-
-	wrappedUnhookCheckRelease := func() {
-		err := gohook.UnHook(helm.CheckRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-	wrappedUnhookInstallRelease := func() {
-		err := gohook.UnHook(helm.InstallRelease)
-		if err != nil {
-			t.Fatal(err.Error())
-		}
-	}
-
-	targetDataLoad := datav1alpha1.DataLoad{
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      "test",
-			Namespace: "fluid",
-		},
-		Spec: datav1alpha1.DataLoadSpec{
-			Dataset: datav1alpha1.TargetDataset{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	datasetInputs := []datav1alpha1.Dataset{
-		{
-			ObjectMeta: metav1.ObjectMeta{
-				Name:      "test-dataset",
-				Namespace: "fluid",
-			},
-		},
-	}
-	testObjs := []runtime.Object{}
-	for _, datasetInput := range datasetInputs {
-		testObjs = append(testObjs, datasetInput.DeepCopy())
-	}
-	client := fake.NewFakeClientWithScheme(testScheme, testObjs...)
-
-	engine := ThinEngine{
-		name: "test",
-	}
-	ctx := cruntime.ReconcileRequestContext{
-		Log:      fake.NullLogger(),
-		Client:   client,
-		Recorder: record.NewFakeRecorder(1),
-	}
-
-	err := gohook.Hook(helm.CheckRelease, mockExecCheckReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseErr, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err != nil {
-		t.Errorf("fail to catch the error")
-	}
-	wrappedUnhookInstallRelease()
-
-	err = gohook.Hook(helm.InstallRelease, mockExecInstallReleaseCommon, nil)
-	if err != nil {
-		t.Fatal(err.Error())
-	}
-	err = engine.CreateDataLoadJob(ctx, targetDataLoad)
-	if err != nil {
-		t.Errorf("fail to exec the function")
-	}
-	wrappedUnhookCheckRelease()
-}
diff --git a/pkg/ddc/vineyard/transform_resources_test.go b/pkg/ddc/vineyard/transform_resources_test.go
index 78ab46d6..9006b0ca 100644
--- a/pkg/ddc/vineyard/transform_resources_test.go
+++ b/pkg/ddc/vineyard/transform_resources_test.go
@@ -523,7 +523,7 @@ func TestTransformResourcesForFuseWithValue(t *testing.T) {
 	}{
 		{&datav1alpha1.VineyardRuntime{
 			Spec: datav1alpha1.VineyardRuntimeSpec{
-				Fuse: datav1alpha1.VineyardSockSpec{
+				Fuse: datav1alpha1.VineyardClientSocketSpec{
 					Resources: resources,
 				},
 				TieredStore: datav1alpha1.TieredStore{
diff --git a/pkg/ddc/vineyard/transform_test.go b/pkg/ddc/vineyard/transform_test.go
index f29adfe7..fa1aeac4 100755
--- a/pkg/ddc/vineyard/transform_test.go
+++ b/pkg/ddc/vineyard/transform_test.go
@@ -51,7 +51,7 @@ func TestTransformFuse(t *testing.T) {
 		"test image, imageTag and pullPolicy": {
 			runtime: &datav1alpha1.VineyardRuntime{
 				Spec: datav1alpha1.VineyardRuntimeSpec{
-					Fuse: datav1alpha1.VineyardSockSpec{
+					Fuse: datav1alpha1.VineyardClientSocketSpec{
 						Image:           "dummy-fuse-image",
 						ImageTag:        "dummy-tag",
 						ImagePullPolicy: "IfNotPresent",
@@ -67,7 +67,7 @@ func TestTransformFuse(t *testing.T) {
 		"test image, imageTag and pullPolicy from env": {
 			runtime: &datav1alpha1.VineyardRuntime{
 				Spec: datav1alpha1.VineyardRuntimeSpec{
-					Fuse: datav1alpha1.VineyardSockSpec{
+					Fuse: datav1alpha1.VineyardClientSocketSpec{
 						ImagePullPolicy: "IfNotPresent",
 						Env:             map[string]string{"TEST_ENV": "true"},
 						CleanPolicy:     "OnRuntimeDeleted",
@@ -473,6 +473,78 @@ func TestTransformWorkerOptions(t *testing.T) {
 	}
 }
 
+func TestTransformFuseOptions(t *testing.T) {
+	tests := []struct {
+		name     string
+		runtime  *datav1alpha1.VineyardRuntime
+		value    *Vineyard
+		expected map[string]string
+	}{
+		{
+			name: "NoFuseOptions",
+			runtime: &datav1alpha1.VineyardRuntime{
+				Spec: datav1alpha1.VineyardRuntimeSpec{
+					Fuse: datav1alpha1.VineyardClientSocketSpec{
+						Options: map[string]string{},
+					},
+				},
+			},
+			value: &Vineyard{
+				FullnameOverride: "vineyard",
+				Master: Master{
+					Ports: map[string]int{
+						"client": 2379,
+					},
+				},
+			},
+			expected: map[string]string{
+				"size":          "0",
+				"etcd_endpoint": "http://vineyard-master-0.vineyard-master.default:2379",
+				"etcd_prefix":   "/vineyard",
+			},
+		},
+		{
+			name: "WithFuseOptions",
+			runtime: &datav1alpha1.VineyardRuntime{
+				Spec: datav1alpha1.VineyardRuntimeSpec{
+					Fuse: datav1alpha1.VineyardClientSocketSpec{
+						Options: map[string]string{
+							"size":           "10Gi",
+							"etcd_endpoint":  "http://vineyard-master-0.vineyard-master.default:12379",
+							"reserve_memory": "true",
+						},
+					},
+				},
+			},
+			value: &Vineyard{
+				Master: Master{
+					Ports: map[string]int{
+						"client": 12379,
+					},
+				},
+			},
+			expected: map[string]string{
+				"size":           "10Gi",
+				"etcd_endpoint":  "http://vineyard-master-0.vineyard-master.default:12379",
+				"etcd_prefix":    "/vineyard",
+				"reserve_memory": "true",
+			},
+		},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			engine := &VineyardEngine{
+				namespace: "default",
+			}
+			actual := engine.transformFuseOptions(tt.runtime, tt.value)
+			if !reflect.DeepEqual(actual, tt.expected) {
+				t.Errorf("%s: expected %v, got %v", tt.name, tt.expected, actual)
+			}
+		})
+	}
+}
+
 func TestTransformWorkerPorts(t *testing.T) {
 	tests := []struct {
 		name     string