Patent ID: 9734256
Date: 2017-08-15
CPC Classifications: G06F

Claim:
1. A method of mapping data addresses, the method comprising: identifying, by a first host that utilizes a first database of addresses of data, a selected address of a storage device from the first database, wherein the selected address is not used to store datums within the storage device according to the first database; creating, by the first host, a first input/output (I/O) transaction, wherein the first I/O transaction is a write request related to a first datum, wherein the first datum is not stored in the storage device, wherein the first I/O transaction requests that the first datum will be written at the selected address; determining, by the first host, that the first database identifies a first listening service as managing the selected address, wherein the first listening service manages I/O transactions for a first set of addresses of the storage device; in response to determining that the first database identifies the first listening service as managing the selected address, transmitting, by the first host, the first I/O transaction to the first listening service; receiving, by the first listening service, the first I/O transaction; executing, by the first listening service, the first I/O transaction at the selected address of the first set of addresses; creating a first data packet to respond to the first I/O transaction, wherein a header of the first data packet includes the selected address; transmitting, by the first listening service, the first data packet to the first host; in response to the header of the first data packet including the selected address, updating, by the first host, the first database of addresses with the selected address; migrating, by the storage device, the first datum from the selected address to a new address; creating, by the first host, a second I/O transaction, wherein the second I/O transaction is a write request related to the first datum; determining, by the first host, that the first database identifies the selected address as the location of the first datum, wherein an amount of time that has elapsed between the identifying of the selected address in response to determining that the first database identifies the selected address as the location of the first datum, determining, by the first host, that the first database identifies the first listening service as managing the selected address; in response to determining that the first database identifies the first listening service as managing the selected address, transmitting, by the first host, the second I/O transaction to the first listening service; receiving, by the first listening service, the second I/O transaction, wherein the first set of addresses does not include the new address; forwarding, by the first listening service, the first I/O transaction to a second listening service that manages I/O transactions for a second set of addresses, wherein the second set of address includes the new address; executing, by the second listening service, the second I/O transaction at the new address of the second set of addresses; creating a second data packet to respond to the second I/O transaction, wherein a second header of the second data packet includes the new address; transmitting, by the second listening service, the second data packet to the first host; in response to the header of the second data packet including the new address, updating, by the first host, the first database of addresses with the new address; deleting, by the first host, the new address from the first database of addresses in response to the first host failing to use the new address within the first database for a period of time that is longer than the time criterion; initializing a connection between a second host and the storage device, wherein initializing the connection includes the second host requesting a complete set of addresses of the storage device; receiving, by the second host, a complete set of addresses of the storage device, wherein every address of the storage device is included in the complete set of addresses; storing, by the second host, the complete set of addresses in a second database of addresses of data; creating, by the second host, a third I/O transaction, wherein the third I/O transaction is a write request related to the first datum; determining, by the second host, that the second database identifies the new address as the location of the first datum; in response to determining that the second database identifies the new address as the location of the first datum, determining, by the second host, that the second database identifies the second listening service as managing the new address; in response to determining that the second database identifies the second listening service as managing the new address, transmitting, by the second host, the third I/O transaction to the second listening service; receiving, by the second listening service, the third I/O transaction; executing, by the second listening service, the third I/O transaction at the new address; determining, by the second listening service, that the second host is using the second database and that the second database correctly stores the new address as the location of the first datum; creating a third data packet to respond to the third I/O transaction, wherein the header does not include the selected address in response to determining that the second host is using the second database and that the second database correctly stores the new address as the location of the first datum; transmitting, by the second listening service, the third data packet to the second host; processing, by the second host, the third data packet; creating, by a third host that does not host a database of addresses and is not configured to read addresses from headers of data packets, a fourth I/O transaction, wherein the fourth I/O transaction is a read request related to the first datum; transmitting, by the third host, the fourth I/O transaction to the first listening service; receiving, by the first listening service, the fourth I/O transaction; forwarding, by the first listening service, the fourth I/O transaction to the second listening service; executing, by the second listening service, the fourth I/O transaction at the new address; creating a fourth data packet to respond to the fourth I/O transaction, wherein the fourth data packet includes the first datum, wherein a header of the fourth data packet includes the new address; transmitting, by the first listening service, the fourth data packet to the third host; processing, by the third host, the fourth data packet, wherein processing the fourth packet includes successfully retrieving the first datum from the fourth data packet; detecting, by the storage device, that the third host is not configured to read addresses from headers of data packets; and in response to detecting that the third host is not configured to read addresses from headers of data packets, disabling, by the storage device, the ability of listening services of the storage device to include addresses within headers for data packets transmitted to the third host.