Browse Source

network fetch

kaikas 7 years ago
parent
commit
12911e19b5
2 changed files with 41 additions and 23 deletions
  1. 35 23
      src/myco-daemon.c
  2. 6 0
      src/myco-modules-default.c

+ 35 - 23
src/myco-daemon.c

@@ -284,29 +284,26 @@ int myco_daemon_unregister_resource(message msg) {
 int myco_daemon_request_resource(message msg) {
 	myco_resource *current_resource;
 
-	// Check if resource exists
-	if ((current_resource = myco_daemon_find_resource(msg.resource_name)) == NULL) {
-		sprintf(msg.message, "ERROR: resource %s does not exist\n", msg.resource_name);
-		myco_send(msg.agent_message_queue_id, msg);
-		return -1;
-	}
-	// Check if agent that requests already owns the resource
-	if (strcmp(current_resource->agent, msg.agent_name) == 0) {
-		sprintf(msg.message, "ERROR: resource %s already belongs to agent %s\n", msg.resource_name, msg.agent_name);
-		myco_send(msg.agent_message_queue_id, msg);
-		return -1;
-	}
-	// Check if resource is transactional
-	if (current_resource->transactional != RESOURCE_TRANSACTIONAL) {
-		sprintf(msg.message, "ERROR: resource %s is not transactional\n", msg.resource_name);
-		myco_send(msg.agent_message_queue_id, msg);
-		return -1;
-	}
-
-	// Check if resource resides on same node
-	//printf("\n The adress is: %s\n", inet_ntoa(*(struct in_addr *)&current_resource->node_ip));
+	// Check if resource exists on this node
+	if ((current_resource = myco_daemon_find_resource(msg.resource_name)) != NULL) {
+		// Check if agent that requests already owns the resource
+		if (strcmp(current_resource->agent, msg.agent_name) == 0) {
+			sprintf(msg.message, "ERROR: resource %s already belongs to agent %s\n", msg.resource_name, msg.agent_name);
+			myco_send(msg.agent_message_queue_id, msg);
+			return -1;
+		}
+		// Check if resource is transactional
+		if (current_resource->transactional != RESOURCE_TRANSACTIONAL) {
+			sprintf(msg.message, "ERROR: resource %s is not transactional\n", msg.resource_name);
+			myco_send(msg.agent_message_queue_id, msg);
+			return -1;
+		}
+	
+		// Check if resource resides on same node
+		// printf("\n The adress is: %s\n", inet_ntoa(*(struct in_addr *)&current_resource->node_ip));
+		// if (current_resource->node_ip == myco_daemon_node_ip) {
+	
 
-	if (current_resource->node_ip == myco_daemon_node_ip) {
 		// If on same node, send information
 		msg.sender_pid = current_resource->pid; 
 		msg.resource_size = current_resource->size;
@@ -325,7 +322,22 @@ int myco_daemon_request_resource(message msg) {
 			return -1;
 		}
 	} else {
-		// TODO: Handle case where resource is on another node
+		// Handle case where resource is on another node
+		// TODO: Request Resource information from indexer
+
+		// fetch resource
+		void *local_resource_pointer;
+		int local_resource_size;
+		char resource_name[RESOURCE_NAME_LENGTH];
+
+		myco_network_fetch_resource(local_resource_pointer, resource_name, local_resource_size);
+
+		// if no resource registered with indexer:
+		if (0 == 1) {
+			sprintf(msg.message, "ERROR: resource %s does not exist\n", msg.resource_name);
+			myco_send(msg.agent_message_queue_id, msg);
+			return -1;
+		}
 	}
 
 

+ 6 - 0
src/myco-modules-default.c

@@ -17,3 +17,9 @@
 // Serialize with protobuf-c
 // Request(local pointer, remote pointer, size)
 // make ping pong example
+
+myco_network_fetch_resource(void *local_pointer, char name[RESOURCE_NAME_LENGTH], int size) {
+	printf("Transferring data over network!\n");
+
+	return 0;
+}