Class MachineStateControl
java.lang.Object
uk.ac.manchester.spinnaker.alloc.db.SQLQueries
uk.ac.manchester.spinnaker.alloc.db.DatabaseAwareBean
uk.ac.manchester.spinnaker.alloc.admin.MachineStateControl
@Service public class MachineStateControl extends DatabaseAwareBean
How to manage the state of a machine and boards in it.
- Author:
- Donal Fellows
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
MachineStateControl.BoardState
Access to the enablement-state of a board.static class
MachineStateControl.MachineStateException
Exception thrown when the machine state can't be read from or written to a BMP.Nested classes/interfaces inherited from class uk.ac.manchester.spinnaker.alloc.db.DatabaseAwareBean
DatabaseAwareBean.AbstractSQL
-
Field Summary
Fields inherited from class uk.ac.manchester.spinnaker.alloc.db.SQLQueries
ADD_BLACKLISTED_CHIP, ADD_BLACKLISTED_CORE, ADD_BLACKLISTED_LINK, ADD_USER_TO_GROUP, ADJUST_QUOTA, ALLOCATE_BOARDS_BOARD, ALLOCATE_BOARDS_JOB, BUMP_IMPORTANCE, CHECK_LOCATION, checkRectangle, checkRectangleAt, CLEAR_BLACKLISTED_CHIPS, CLEAR_BLACKLISTED_CORES, CLEAR_BLACKLISTED_LINKS, COMPLETED_BLACKLIST_WRITE, COMPLETED_BOARD_INFO_READ, COMPLETED_GET_SERIAL_REQ, COUNT_CHANGES_FOR_JOB, COUNT_FUNCTIONING_BOARDS, COUNT_MACHINE_THINGS, COUNT_POWERED_BOARDS, countConnected, CREATE_BLACKLIST_READ, CREATE_BLACKLIST_WRITE, CREATE_GROUP, CREATE_GROUP_IF_NOT_EXISTS, CREATE_SERIAL_READ_REQ, CREATE_TEMP_READ_REQ, CREATE_USER, DEALLOCATE_BMP_BOARDS_JOB, DECREMENT_QUOTA, DELETE_ALLOC_RECORD, DELETE_BLACKLIST_OP, DELETE_GROUP, DELETE_JOB_RECORD, DELETE_MACHINE_TAGS, DELETE_NMPI_JOB, DELETE_NMPI_SESSION, DELETE_PENDING, DELETE_TASK, DELETE_USER, DESTROY_JOB, ERROR_PENDING, FAILED_BLACKLIST_OP, FIND_BOARD_BY_ID, FIND_BOARD_BY_NAME_AND_CFB, FIND_BOARD_BY_NAME_AND_IP_ADDRESS, FIND_BOARD_BY_NAME_AND_XYZ, FIND_EXPIRED_JOBS, FIND_FREE_BOARD, FIND_LOCATION, findBoardByGlobalChip, findBoardByIPAddress, findBoardByJobChip, findBoardByLogicalCoords, findBoardByPhysicalCoords, findRectangle, findRectangleAt, FINISHED_PENDING, GET_ALL_BMP_BOARDS, GET_ALL_BMPS, GET_ALL_BOARDS, GET_ALL_BOARDS_OF_ALL_MACHINES, GET_ALL_MACHINES, GET_AVAILABLE_BOARD_NUMBERS, GET_BLACKLIST_READS, GET_BLACKLIST_WRITES, GET_BLACKLISTED_CHIPS, GET_BLACKLISTED_CORES, GET_BLACKLISTED_LINKS, GET_BMP_ADDRESS, GET_BMP_BOARD_NUMBERS, GET_BOARD_ADDRESS, GET_BOARD_BY_COORDS, GET_BOARD_CONNECT_INFO, GET_BOARD_JOB, GET_BOARD_NUMBERS, GET_BOARD_POWER_INFO, GET_BOARD_REPORTS, GET_CHANGES, GET_COMPLETED_BLACKLIST_OP, GET_CONSOLIDATION_TARGETS, GET_CURRENT_USAGE, GET_DEAD_BOARDS, GET_FUNCTIONING_FIELD, GET_GROUP_BY_ID, GET_GROUP_BY_NAME, GET_GROUP_BY_NAME_AND_MEMBER, GET_GROUP_NAMES_OF_USER, GET_GROUP_QUOTA, GET_JOB, GET_JOB_BOARD_COORDS, GET_JOB_BOARDS, GET_JOB_CHIP_DIMENSIONS, GET_JOB_IDS, GET_JOB_NMPI_JOB, GET_JOB_SESSION, GET_JOB_USAGE_AND_QUOTA, GET_LIVE_BOARDS, GET_LIVE_JOB_IDS, GET_LOCAL_USER_DETAILS, GET_MACHINE_BY_ID, GET_MACHINE_JOBS, GET_MACHINE_REPORTS, GET_MACHINE_WRAPS, GET_MEMBERSHIP, GET_MEMBERSHIPS_OF_USER, GET_NAMED_MACHINE, GET_ROOT_BMP_ADDRESS, GET_ROOT_COORDS, GET_ROOT_OF_BOARD, GET_SERIAL_INFO_REQS, GET_SUM_BOARDS_POWERED, GET_TAGS, GET_TEMP_INFO_REQS, GET_USER_AUTHORITIES, GET_USER_DETAILS, GET_USER_DETAILS_BY_NAME, GET_USER_DETAILS_BY_SUBJECT, GET_USER_ID, GET_USER_QUOTA, GET_USERS_OF_GROUP, getAllocationTasks, getConnectedBoards, getDeadLinks, getJobsWithChanges, getPerimeterLinks, getReportedBoards, GROUP_SYNC_ADD_GROUPS, GROUP_SYNC_DROP_TEMP_TABLE, GROUP_SYNC_INSERT_TEMP_ROW, GROUP_SYNC_MAKE_TEMP_TABLE, GROUP_SYNC_REMOVE_GROUPS, INSERT_BMP, INSERT_BOARD, INSERT_BOARD_REPORT, INSERT_JOB, INSERT_LINK, INSERT_MACHINE_SPINN_5, INSERT_REQ_BOARD, INSERT_REQ_N_BOARDS, INSERT_REQ_SIZE, INSERT_REQ_SIZE_BOARD, INSERT_TAG, IS_BOARD_BLACKLIST_CURRENT, IS_USER_LOCKED, issueChangeForJob, KILL_JOB_ALLOC_TASK, LIST_ALL_GROUPS, LIST_ALL_GROUPS_OF_TYPE, LIST_ALL_USERS, LIST_ALL_USERS_OF_TYPE, LIST_LIVE_JOBS, LIST_MACHINE_NAMES, LOAD_DIR_INFO, MARK_BOARD_BLACKLIST_CHANGED, MARK_BOARD_BLACKLIST_SYNCHED, MARK_CONSOLIDATED, MARK_LOGIN_FAILURE, MARK_LOGIN_SUCCESS, NOTE_DESTROY_REASON, READ_HISTORICAL_ALLOCS, READ_HISTORICAL_JOBS, REMOVE_USER_FROM_GROUP, SET_BOARD_POWER_OFF, SET_BOARD_POWER_ON, SET_BOARD_SERIAL_IDS, SET_COLLAB_QUOTA, SET_FUNCTIONING_FIELD, SET_JOB_NMPI_JOB, SET_JOB_SESSION, SET_MACHINE_STATE, SET_MAX_COORDS, SET_STATE_DESTROYED, SET_STATE_PENDING, SET_USER_DISABLED, SET_USER_LOCKED, SET_USER_NAME, SET_USER_PASS, SET_USER_TRUST, UNLOCK_LOCKED_USERS, UPDATE_GROUP, UPDATE_KEEPALIVE, WRITE_HISTORICAL_ALLOCS, WRITE_HISTORICAL_JOBS
-
Constructor Summary
Constructors Constructor Description MachineStateControl()
-
Method Summary
Modifier and Type Method Description Optional<MachineStateControl.BoardState>
findId(int id)
Look up a board for management.Optional<MachineStateControl.BoardState>
findIP(@NotBlank String machine, @IPAddress String address)
Look up a board for management.Optional<MachineStateControl.BoardState>
findPhysical(@NotBlank String machine, @Valid @NotNull PhysicalCoords coords)
Look up a board for management.Optional<MachineStateControl.BoardState>
findTriad(@NotBlank String machine, @Valid TriadCoords coords)
Look up a board for management.Map<String,List<BoardIssueReport>>
getMachineReports()
List<MachineTagging>
getMachineTagging()
String
getSerialNumber(MachineStateControl.BoardState board)
Read the serial number off a board.boolean
isBlacklistSynched(MachineStateControl.BoardState board)
Test whether a board's blacklist is believed to be synchronised to the hardware.Optional<Blacklist>
pullBlacklist(int boardId, int bmpId)
Retrieve the blacklist for the given board from the board and store it in the database.Optional<Blacklist>
pushBlacklist(MachineStateControl.BoardState board)
Take the blacklist for the given board in the database and write it to the board.void
readAllBoardSerialNumbers(@NotBlank String machineName)
Ensure that the database has the actual serial numbers of all boards in a machine.Optional<Blacklist>
readBlacklistFromDB(MachineStateControl.BoardState board)
Given a board, read its blacklist from the database.Optional<Blacklist>
readBlacklistFromMachine(int boardId, int bmpId)
Given a board, read its blacklist off the machine.Optional<ADCInfo>
readTemperatureFromMachine(int boardId, int bmpId)
Given a board, read its temperature data off the machine.void
setMachineState(@NotBlank String machineName, boolean inService)
Sets whether a machine is in service.void
updateAllBlacklists(@NotBlank String machineName)
Retrieve all blacklists, parse them, and store them in the DB's model.void
updateTags(@NotBlank String machineName, Set<@NotBlank String> tags)
Replace the tags on a machine with a given set.void
writeBlacklistToDB(int boardId, @Valid Blacklist blacklist)
Given a board, write a blacklist for it to the database.void
writeBlacklistToMachine(int boardId, int bmpId, @Valid Blacklist blacklist)
Write a blacklist to a board on the machine.Methods inherited from class uk.ac.manchester.spinnaker.alloc.db.DatabaseAwareBean
execute, executeRead, getConnection, getHistoricalConnection, isHistoricalDBAvailable
-
Constructor Details
-
MachineStateControl
public MachineStateControl()
-
-
Method Details
-
findId
Look up a board for management.- Parameters:
id
- The unique ID of the board. Because this is fully unique, the machine name is not needed.- Returns:
- Board state manager
-
findTriad
public Optional<MachineStateControl.BoardState> findTriad(@NotBlank @NotBlank String machine, @Valid @NonNull @Valid TriadCoords coords)Look up a board for management.- Parameters:
machine
- The name of the machine.coords
- Triad coordinates- Returns:
- Board state manager
-
findPhysical
public Optional<MachineStateControl.BoardState> findPhysical(@NotBlank @NotBlank String machine, @Valid @NotNull @Valid @NotNull PhysicalCoords coords)Look up a board for management.- Parameters:
machine
- The name of the machine.coords
- Physical coordinates- Returns:
- Board state manager
-
findIP
public Optional<MachineStateControl.BoardState> findIP(@NotBlank @NotBlank String machine, @IPAddress @IPAddress String address)Look up a board for management.- Parameters:
machine
- The name of the machine.address
- Board IP address- Returns:
- Board state manager
-
getMachineTagging
- Returns:
- The mapping from machine names+IDs to tags.
-
getMachineReports
- Returns:
- The unacknowledged reports about boards with potential problems in existing machines, categorised by machine.
-
updateTags
Replace the tags on a machine with a given set.- Parameters:
machineName
- The name of the machine to update the tags of.tags
- The tags to apply. Existing tags will be removed.- Throws:
IllegalArgumentException
- If the machine with that name doesn't exist.
-
setMachineState
Sets whether a machine is in service.- Parameters:
machineName
- The name of the machine to controlinService
- Whether to put the machine in or out of service.
-
pullBlacklist
Retrieve the blacklist for the given board from the board and store it in the database.- Parameters:
boardId
- The board to get the blacklist of.bmpId
- The BMP of the board.- Returns:
- The blacklist that was transferred, if any.
-
pushBlacklist
Take the blacklist for the given board in the database and write it to the board.- Parameters:
board
- The board to set the blacklist of.- Returns:
- The blacklist that was transferred, if any.
-
readAllBoardSerialNumbers
Ensure that the database has the actual serial numbers of all boards in a machine.- Parameters:
machineName
- Which machine to read the serial numbers of.
-
updateAllBlacklists
Retrieve all blacklists, parse them, and store them in the DB's model.- Parameters:
machineName
- Which machine to get the blacklists of.
-
readBlacklistFromDB
Given a board, read its blacklist from the database.- Parameters:
board
- Which board to read the blacklist of.- Returns:
- The board's blacklist.
- Throws:
DataAccessException
- If access to the DB fails.
-
writeBlacklistToDB
Given a board, write a blacklist for it to the database. Does not push the blacklist to the board.- Parameters:
boardId
- The ID of the board to write.blacklist
- The blacklist to write.- Throws:
DataAccessException
- If access to the DB fails.
-
readBlacklistFromMachine
public Optional<Blacklist> readBlacklistFromMachine(int boardId, int bmpId) throws InterruptedExceptionGiven a board, read its blacklist off the machine.- Parameters:
boardId
- Which board to read the blacklist of.bmpId
- The BMP of the board.- Returns:
- The board's blacklist.
- Throws:
DataAccessException
- If access to the DB fails.MachineStateControl.MachineStateException
- If the read fails.InterruptedException
- If interrupted.
-
writeBlacklistToMachine
public void writeBlacklistToMachine(int boardId, int bmpId, @Valid @Valid Blacklist blacklist) throws InterruptedExceptionWrite a blacklist to a board on the machine.- Parameters:
boardId
- Which board to write the blacklist of.bmpId
- Which BMP the board belongs to.blacklist
- The blacklist to write.- Throws:
DataAccessException
- If access to the DB fails.MachineStateControl.MachineStateException
- If the write fails.InterruptedException
- If interrupted. Note that interrupting the thread does not necessarily halt the write of the blacklist.
-
getSerialNumber
Read the serial number off a board.- Parameters:
board
- Which board to get the serial number of.- Returns:
- The serial number.
- Throws:
DataAccessException
- If access to the DB fails.MachineStateControl.MachineStateException
- If the write fails.InterruptedException
- If interrupted.
-
readTemperatureFromMachine
public Optional<ADCInfo> readTemperatureFromMachine(int boardId, int bmpId) throws InterruptedExceptionGiven a board, read its temperature data off the machine.- Parameters:
boardId
- Which board to read the temperature data of.bmpId
- The BMP that controls the board.- Returns:
- The board's temperature data.
- Throws:
DataAccessException
- If access to the DB fails.MachineStateControl.MachineStateException
- If the read fails.InterruptedException
- If interrupted.
-
isBlacklistSynched
Test whether a board's blacklist is believed to be synchronised to the hardware.- Parameters:
board
- Which board?- Returns:
- True if the synch has happened, i.e., the time the blacklist data was changed is no later than the last time the synch happened.
-